【发布时间】:2018-05-16 14:06:53
【问题描述】:
如果没有找到第二个字符串,在 2 个字符串之间提取字符串并提取到末尾的模式是什么?例如:检索分配给 foo 的值(值包含空格)
import re
s1 = 'quz=1, 2, 3 and foo=4, 5, 6 and bar=7, 8, 9'
m = re.match(pattern=r'^.*foo=(.*)\sand', string=s1)
assert m.group(1) == '4, 5, 6'
s2 = 'quz=1, 2, 3 and foo=4, 5, 6'
m = re.match(pattern=r'^.*foo=(.*)', string=s2)
assert m.group(1) == '4, 5, 6'
谢谢
【问题讨论】:
-
r'^.*foo=(.+?)(?:\sand|$)'可以通过使and可选匹配来工作 -
您也可以使用
r'foo=((?:(?! and).)*)',但效率不高。另一种选择是r'foo=(\S*(?:\s(?!and)\S*)*)'。 -
感谢 anubhava,它奏效了。顺便说一句,您为什么将 foo=(.*) 更改为 foo=(.+?) ?塔
-
@CanLu:这是因为
.*是贪婪的,会尝试匹配最长的字符串直到字符串结尾。所以r'^.*foo=(.*?)(?:\sand|$)'也可以。
标签: python regex python-2.7