Python re.finditer():简明地检测“A或:B或C:D”

时间:2011-10-20 09:36:36

标签: python regex iteration

我正在寻找一个正则表达式,它只为字符串“ A:B C:D ”返回三个匹配的组 其中A,B,C,D是单词示例(\ w +) 以下Python代码打印不需要的(无,无)。

我只想要('A',无)(无,'B')和('C','D')使用一个正则表达式(没有添加的python代码进行过滤)。

for m in re.compile(r'(?:(\w+)|)(?:(?::)(\w+)|)').finditer('A :B C:D'):
    print m.groups()

2 个答案:

答案 0 :(得分:4)

这可能会起到作用:

(?=[\w:])(\w*)(?::(\w*))?

(\w*)(?::(\w*))?描述了你想要的结构,但它有一个问题,它也匹配空字符串;因此,我们必须确保在开始时至少有一个非空格字符(将由贪婪的运算符匹配),并且在开始时的前瞻性就是这样。

编辑:错误粘贴:)

答案 1 :(得分:0)

import re

print([m.groups() for m in re.finditer(
    r'''(?x)               # verbose mode
        (\w+)?             # match zero-or-more \w's
        (?: :|\s)          # match (non-groupingly) a colon or a space 
        (\w+ (?:\s|\Z))?   # match zero-or-more \w's followed by a space or EOL
        ''',
    'A :B C:D')])

产量

[('A', None), (None, 'B '), ('C', 'D')]