使用python获取部分响应体

问题描述 投票:0回答:1

我从服务器上得到一个响应。

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 作为一个文本。

有什么想法或建议吗?

编辑:我已经把响应中的 "**"字符去掉了,因为是想把必要的部分加粗。

python string request byte response
1个回答
0
投票

逃离 $ 字符,并对字符进行分组,以避免调用 split:

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

1
投票

如果你的数据是以字节为单位,那么你应该使用搜索字节。

但主要问题是 $ 在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())
© www.soinside.com 2019 - 2024. All rights reserved.