例如
s = "Before\=String TARGETA After\=String limbo nonsense Before\=String TARGETB After\=String ..... Before\=String TARGETC After\=String"
结果列表应为:
['TARGETA','TARGETB','TARGETC']
我试过了
regex = '.*Before\=String(.*?)After\=String.*'
matches = re.search(regex, val).groups()
>> (' TARGETC ',)
问题是它只返回最后一项。你知道吗
使用^{} 返回所有匹配项的列表,如果实际字符串中确实包含反斜杠,请确保对其进行双转义。您可以删除前导/尾随
.*
,因为查找这些子字符串并在捕获组之前和之后使用\s*
来消耗多余的空白是不必要的。你知道吗不清楚你的反斜杠是否真的在目标字符串中。如果它们是,并且需要匹配,那么您需要将它们成对地放入正则表达式中,因为一个简单的
\=
将只匹配等号。你知道吗re.search
不会按您的要求执行,因为它只会在目标字符串中找到模式的第一个出现处。您也不需要在regex的核心前后.*
,因为(除非您使用re.match
)模式可以匹配目标字符串中的任何地方,而不必全部匹配。你知道吗re.findall
函数就是您需要的函数。它不是返回MatchObject
,而是简单地返回目标字符串中与模式匹配的所有子字符串的列表。或者,如果模式中有任何组,它将返回这些组匹配的子字符串,而不是整个模式匹配的子字符串。你知道吗下面的代码允许在before和after标记的内容周围使用可选的空格。另外,如果您想在单独的一行中定义regex,那么您也可以在那里编译它。
re.X
标志值允许将不重要的空白添加到正则表达式中,以使其更具可读性。你知道吗输出
您需要使用
re.findall()
而不是re.search()
,并从开始和结束处删除.*
元素:演示:
请注意,这仍然包含空格;如果不想包含空格,请在
(...)
捕获组之前和之后添加\s*
。你知道吗相关问题 更多 >
编程相关推荐