我正在尝试创建一个匹配表达式连续实例的正则表达式,但前提是文本以该表达式开头。
假设我想找一个数字后跟一个单词:\d \w+
对于文本:
1个字2个字母更多字3个组
我想得到两组:“1个单词”和“2个字母”,因为该行以匹配(数字和单词 - “1个单词”)开头,另一个紧跟在后面(“2个字母”) “)。但我不希望它匹配“3组”。
对于文字:
abc 1个字3个字母
没有组匹配,因为它以“abc”开头。
提前致谢!
答案 0 :(得分:0)
使用re模块无法在“纯正则表达式”中执行此操作。但您可以使用re.finditer
方法检查每个结果的起始索引:
import re
s = '1 word 2 letters some more words 3 groups'
def getFromStart(p, s):
index = 0
for m in re.finditer(p, s):
if m.start() == index:
yield m
index = m.end()
else:
raise StopIteration
print([m.group(1) for m in getFromStart(r'(\d \w+)\s*', s)])
其他方式,请勿使用re模块并安装具有\G
锚点的regex模块。此锚点匹配前一个结果之后的位置(默认情况下为字符串的开头)。使用它启动模式可确保连续匹配从字符串的开头连续:
import regex
s = '1 word 2 letters some more words 3 groups'
print(regex.findall(r'\G(\d \w+)\s*', s))