我试图使用finditer / regex。我得到的输入看起来应该由正则表达式处理。在一种情况下它匹配,而在另一种情况下它不匹配。请帮我弄清楚为什么qarg = foo没有匹配,但qarg = bar匹配
这里是代码:
import re
def doit(line):
re_args = re.compile('''\s+([a-zA-Z0-9]+)=(?P<quote>['"]?)([^(?P=quote)]+)(?P=quote)(?=\s|$)''')
print()
for match in re_args.finditer(line):
print(match.group(0))
doit(""" qarg=foo q=sw qarg='-B final'""")
doit(""" qarg=bar q=sw qarg='-B final'""")
=====这里输出===
q=sw
qarg='-B final'
qarg=bar
q=sw
qarg='-B final'
注意到正在打印qarg = bar,但第一种情况下的qargs = foo不是。我错过了什么?我使用3.6.1的python
答案 0 :(得分:0)
修复是使用([*(?P = quote)] +)替换(。*?)
如果我使用([^(?P = quote)] +)当没有引号时它是空的,整个正则表达式会在那时搞砸。