正则表达式;匹配整个但只参与其中。怎么样?

时间:2014-05-10 11:20:47

标签: python regex python-2.7

在多部分HTTP有效负载中,部分由(可能)任意字符串分隔。此字段称为boundary,位于Content-Type标头内。一个例子是

Content-Type: multipart/related; boundary=SOME_RANDOM_STRING

可以通过匹配boundary=[a-zA-z0-9]+(此正则表达式用于演示目的)然后选择右侧来获取此行。我正在寻找一步一步的功能;

boundary=efefef

返回efefef

使用标准的Python正则表达式库。

4 个答案:

答案 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(我猜这是你问题中的拼写错误)并不能完全符合你的要求,因为在Za之间的ASCII表格中有一些非字母字符。 {{1}}。

答案 3 :(得分:1)

为什么不使用split功能?

print s.split('boundary=')[1]