我从服务器上得到一个响应。
B�
QeyJhbGciOiJIUzI1NiJ9.Mzc1Mjk4MjUzNjA1.PFblnWR46sByMIZX2fmot9SB8CNYDwHyDOduIf29Gn8$04059f6f-sdfs-2df2-lj2k-ce310d7e3e8c"5ecf7534b4ccd20100d29378*�所
当我在响应中使用编码后
response = r.text.encode('utf8')
我的响应变量里有这个
b'B\xe2\x80\xba\x01\nQeyJhbGciOiJIUzI1NiJ9.Mzc1Mjk4MjUzNjA1.GKjZw55OvoNpH4vOw0jMSQoCYQ3mIn4b0Hq7Ye5S3wA\x12$04059f6f-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)
结果=无。
我想实现的是得到 04059f6f-sdfs-2df2-lj2k-ce310d7e3e8c 作为一个文本。
有什么想法或建议吗?
编辑:我已经把响应中的 "**"字符去掉了,因为是想把必要的部分加粗。
逃离 $
字符,并对字符进行分组,以避免调用 split
:
re.search('(\x12\$)(.*)(\x18)', response.decode('utf-8'))[2]
Out[38]: '04059f6f-sdfs-2df2-lj2k-ce310d7e3e8c"'
如果你的数据是以字节为单位,那么你应该使用搜索字节。
但主要问题是 $
在regex中具有特殊的含义--行尾,你必须使用 \$
import re
data = b'B\xe2\x80\xba\x01\nQeyJhbGciOiJIUzI1NiJ9.Mzc1Mjk4MjUzNjA1.GKjZw55OvoNpH4vOw0jMSQoCYQ3mIn4b0Hq7Ye5S3wA\x12$04059f6f-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())