我正在尝试从多行生产线变量分配中提取多行值。以下测试用例无法在输入字符串中找到匹配项,并且我不得不承认我不明白为什么。欢迎在标准输出上帮助使此示例代码打印“ a \ b”。

#!/usr/bin/env python

def test():
    s = r"""
FOO=a \
  b
"""
    import re
    print type(s),s
    regex = re.compile(r'^FOO=(.+)(?<!\\)$', re.M)
    m = regex.search(s)
    print m.group(1)

if __name__ == '__main__':
    test()

最佳答案

re.M表示re.MULTILINE,但它与点的符号无关,而与^和$的符号有关

您需要指定re.DOTALL以使点即使与'\ n'也能够匹配

def test():
    s = r"""

FOO=a \

  b

  """
    import re
    print repr(s)
    print '---------------------'
    regex = re.compile(r'^FOO=(.+)(?<!\\)$', re.M)
    print regex.search(s).group(1)
    print '---------------------'
    regex = re.compile(r'^FOO=(.+)(?<!\\)$', re.M|re.DOTALL)
    print regex.search(s).group(1)

test()


结果

'    \n\nFOO=a \\    \n\n  b\n\n  '
---------------------
a \
-----
'a \\    '
---------------------
a \

  b


-----
'a \\    \n\n  b\n\n  '

关于python - 将多行make-line变量赋值与python正则表达式匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6624152/

10-11 22:03
查看更多