在多部分HTTP有效负载中,部分由(可能)任意字符串分隔。此字段称为boundary
,位于Content-Type
标头内。一个例子是
Content-Type: multipart/related; boundary=SOME_RANDOM_STRING
可以通过匹配boundary=[a-zA-z0-9]+
(此正则表达式用于演示目的)然后选择右侧来获取此行。我正在寻找一步一步的功能;
boundary=efefef
的返回efefef
使用标准的Python正则表达式库。
答案 0 :(得分:6)
您可以使用捕获的群组执行此操作:()
:
import re
s = "Content-Type: multipart/related; boundary=SOME_RANDOM_STRING"
>>> print re.search(r'boundary=(\w+)', s).group(1)
SOME_RANDOM_STRING
您还可以使用findall
找到所有匹配的字符串:
import re
s = """Content-Type: multipart/related; boundary=SOME_RANDOM_STRING
Content-Type: multipart/related; boundary=SOME_RANDOM_STRING2
Content-Type: multipart/related; boundary=SOME_RANDOM_STRING3"""
result = re.findall(r'boundary=([\w]+)', s)
for i in result:
print i
[OUTPUT]
SOME_RANDOM_STRING
SOME_RANDOM_STRING2
SOME_RANDOM_STRING3
答案 1 :(得分:3)
虽然它位于email
模块中,但您可能希望考虑使用HTTP有效负载并通过email.message_from_string
运行它,然后自动为您解析内容标头和有效负载然后你可以访问。
即使你的简单字符串示例也适用,例如:
>>> import email
>>> s = "Content-Type: multipart/related; boundary=SOME_RANDOM_STRING"
>>> mp = email.message_from_string(s)
>>> mp.get_boundary()
'SOME_RANDOM_STRING'
答案 2 :(得分:2)
您可以使用positive lookbehind assertion:
(?<=boundary=)[a-zA-Z0-9]+
请注意,A-z
(我猜这是你问题中的拼写错误)并不能完全符合你的要求,因为在Z
和a
之间的ASCII表格中有一些非字母字符。 {{1}}。
答案 3 :(得分:1)
为什么不使用split
功能?
print s.split('boundary=')[1]