使用 python 获取部分响应正文

Get part of the response body using python

我从服务器收到响应:

B�
QeyJhbGciOiJIUzI1NiJ9.Mzc1Mjk4MjUzNjA1.PFblnWR46sByMIZX2fmot9SB8CNYDwHyDOduIf29Gn8059f6f-sdfs-2df2-lj2k-ce310d7e3e8c"5ecf7534b4ccd20100d29378*�所

在我对响应使用编码后:

response = r.text.encode('utf8')

我的响应变量中有这个:

b'B\xe2\x80\xba\x01\nQeyJhbGciOiJIUzI1NiJ9.Mzc1Mjk4MjUzNjA1.GKjZw55OvoNpH4vOw0jMSQoCYQ3mIn4b0Hq7Ye5S3wA\x12059f6f-sdfs-2df2-lj2k-ce310d7e3e8c"\x185ecf7534b4ccd20100d29378*\x06\x08\xc3\x80\xc2\xa4\xc3\x93\xe2\x82\xac\x01'

我正在努力获取这部分 04059f6f-sdfs-2df2-lj2k-ce310d7e3e8c 使用不同的方式

result = re.search('\x12$(.*)\x18', response)
print(result)

结果 = None.

我想要实现的是将 04059f6f-sdfs-2df2-lj2k-ce310d7e3e8c 作为文本获取。

有什么想法或建议吗?

编辑:我已经从响应中删除了“**”字符,因为它试图将必要的部分加粗。

如果您有字节数据,那么您应该使用搜索字节

但主要问题是 $ 在正则表达式中有特殊含义 - 行尾 - 你必须使用 $

import re

data = b'B\xe2\x80\xba\x01\nQeyJhbGciOiJIUzI1NiJ9.Mzc1Mjk4MjUzNjA1.GKjZw55OvoNpH4vOw0jMSQoCYQ3mIn4b0Hq7Ye5S3wA\x12059f6f-sdfs-2df2-lj2k-ce310d7e3e8c"\x185ecf7534b4ccd20100d29378*\x06\x08\xc3\x80\xc2\xa4\xc3\x93\xe2\x82\xac\x01'

result = re.search(b'$(.*)"', data)
print(result[1].decode())

转义 $ 字符并将字符分组以避免调用 split:

re.search('(\x12$)(.*)(\x18)', response.decode('utf-8'))[2]
Out[38]: '04059f6f-sdfs-2df2-lj2k-ce310d7e3e8c"'