正则表达式捕获一组的几个重复

时间:2016-01-20 09:05:43

标签: python regex

我有一个示例文本:

Lorem ipsum AB-CD-01 dolor sit amet, AB-CD-Foobar consectetur

我想捕捉所有短语AB-CD- *。我正在尝试这样的事情:

pattern = re.compile("((AB-CD-\S+).*)*")
result = pattern.search(text)
print(result.groups()) # expected: ('AB-CD-01', 'AB-CD-Foobar')

我知道这是一个相当简单和基本的正则表达式问题,但我找不到任何好的解决方案。

1 个答案:

答案 0 :(得分:3)

您可以使用更简单的模式re.findall

  

返回字符串中所有非重叠的模式匹配,作为字符串列表。字符串从左向右扫描,匹配按照找到的顺序返回如果模式中存在一个或多个组,则返回组列表;如果模式具有多个组,这将是元组列表。结果中包含空匹配,除非它们触及另一场比赛的开头。

带有更新的正则表达式的示例代码:

import re
p = re.compile(r'AB-CD-\S+')
test_str = "Lorem ipsum AB-CD-01 dolor sit amet, AB-CD-Foobar consectetur"
print(re.findall(p, test_str))
# => ['AB-CD-01', 'AB-CD-Foobar']

请参阅IDEONEregex demo

re.search仅查找第一次出现,re.findall返回匹配列表(如果模式中未定义捕获组 - 这就是我建议删除它们的原因)。