计算正则表达式中的完整字符串或字符串子集

时间:2018-05-25 19:41:26

标签: python regex

我正在尝试使用正则表达式解析一些文本,并且希望组合字符串仅在组合出现时注册为一个匹配,但是如果仅出现该子字符串则捕获任何子字符串。例如,我想要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']。但我无法开始考虑任何其他模式可以使这项工作。我怎么能抓住这个?

3 个答案:

答案 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']