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

Return all overlapping patterns using re.findall() in Python?

提前感谢您的阅读。

我有一个字符串:

A = "a levels"

我想匹配以下所有可能的 A level 变体:

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?

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

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

当然,这并不能概括为 Pattern 是一组简单的替代方案。