我正在尝试从多行 make-line 变量赋值中提取多行值。以下测试用例未能在输入字符串中找到匹配项,我不得不承认我不明白为什么。欢迎帮助使此示例代码在标准输出上打印“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,但它不关心dot的符号,它关心^和$的符号
您需要指定 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 '
