我正在尝试使用正则表达式解析一些文本,并且希望组合字符串仅在组合出现时注册为一个匹配,但是如果仅出现该子字符串则捕获任何子字符串。例如,我想要foo bar
或单个字符串,这样我得到:
text = 'foo bar bar foo'
In: re.findall(some_pattern, text)
Out: ['foo bar', 'bar', 'foo']
使用some_pattern = re.compile(r'foo|bar)
返回['foo', 'bar', 'bar', 'foo']
。但我无法开始考虑任何其他模式可以使这项工作。我怎么能抓住这个?
答案 0 :(得分:2)
您可以使用多个|
s:
import re
print(re.findall('foo bar|foo|bar', 'foo bar bar foo'))
输出:
['foo bar', 'bar', 'foo']
答案 1 :(得分:1)
另一种方法:foo(?: bar)?|bar
答案 2 :(得分:1)
也可以这样使用 -
import re
print(re.findall('((foo)\s?(bar))', 'foo bar bar foo'))
输出:
['foo bar', 'bar', 'foo']