使用Python中的re.findall()返回所有重叠模式?

时间:2016-12-08 17:07:48

标签: python regex string findall

提前感谢您阅读。

我有一个字符串:

A = "a levels"

我希望匹配A级的所有以下可能变体:

Pattern = r"a level|a levels"

(设置此模式的形式,我无法更改它。) 搜索之后,我希望得到:

["a level","a levels"]

我使用findall如下:

B = re.findall(Pattern,A)

并获得:

B = "a level"

re.findall仅匹配第一个术语并忽略第二个重叠术语。

Per:Python regex find all overlapping matches?我尝试过使用:

B = re.findall(Pattern,A,overlapped = True)

并收到以下错误:

TypeError: findall() got an unexpected keyword argument 'overlapped'

显然overlapped不再作为关键字参数存在......

然后我看了这个问题:Python regex find all overlapping matches?并尝试了:

C = re.finditer(Pattern,A)
results = match.group()

results = "a level"

所以没有更好的。

如何获得我想要的输出?

相关问:How to find overlapping matches with a regexp?

1 个答案:

答案 0 :(得分:1)

如果所有可能的Pattern都与您展示的相似,则可能对您有用:

B=[b for pat in Pattern.split('|') for b in re.findall(pat, A)]

当然,除了Pattern是一组简单的替代方案之外,这并不概括。