与正则表达式和发现者的python问题,似乎不像它应该匹配

时间:2017-12-07 23:53:06

标签: python regex

我试图使用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

1 个答案:

答案 0 :(得分:0)

修复是使用([*(?P = quote)] +)替换(。*?)

如果我使用([^(?P = quote)] +)当没有引号时它是空的,整个正则表达式会在那时搞砸。