我有一个示例文本:
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')
我知道这是一个非常简单且基本的正则表达式问题,但是我找不到任何好的解决方案。
您可以使用更简单的模式re.findall
:
以string列表的形式返回string中pattern的所有非重叠匹配项。从左到右扫描该字符串,并按找到的顺序返回匹配项。如果模式中存在一个或多个组,则返回一个组列表;否则,返回一个列表。如果模式具有多个组,则这将是一个元组列表。空匹配项将包括在结果中,除非它们碰到另一个匹配项的开头。
带有更新的正则表达式的示例代码:
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']
该re.search
只认定第一次出现,re.findall
返回匹配的列表(如果没有捕获组在模式定义的-这就是为什么我建议删除它们)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句