我有一个示例文本:
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')
我知道这是一个相当简单和基本的正则表达式问题,但我找不到任何好的解决方案。
答案 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']
请参阅IDEONE和regex demo
re.search
仅查找第一次出现,re.findall
返回匹配列表(如果模式中未定义捕获组 - 这就是我建议删除它们的原因)。