从文本开头连续匹配重复的组

时间:2017-03-27 17:46:06

标签: python regex

我正在尝试创建一个匹配表达式连续实例的正则表达式,但前提是文本以该表达式开头。

假设我想找一个数字后跟一个单词:\d \w+ 对于文本:

  

1个字2个字母更多字3个组

我想得到两组:“1个单词”和“2个字母”,因为该行以匹配(数字和单词 - “1个单词”)开头,另一个紧跟在后面(“2个字母”) “)。但我不希望它匹配“3组”。

对于文字:

  

abc 1个字3个字母

没有组匹配,因为它以“abc”开头。

提前致谢!

1 个答案:

答案 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))