Skip to main content
 首页 » 编程设计

python之将多行 make-line 变量赋值与 python 正则表达式匹配

2024年09月03日31mfrbuaa

我正在尝试从多行 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  '