我正在寻找一个正则表达式,它只为字符串“ 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()
答案 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')]