【问题标题】:Regex Expressions for different lines- python不同行的正则表达式 - python
【发布时间】:2014-12-23 20:32:13
【问题描述】:

我正在尝试匹配两行之间的正则表达式。 例如,如果有这样一段文字:

\\[-16pt]
x = 5
print(x)     
\\
\thinhline

我会尝试匹配第一行和最后两行之间的所有内容。但是,由于该段以 2 行结束 (\\ \n \thinhline),我无法找到搜索多行的模式。这是我所拥有的,但它不起作用:

content = replace_section(r'\\\\[-16pt]',r'\\\\\n\thinhline',  content)

我该如何解决这个问题?任何帮助将不胜感激,谢谢。

【问题讨论】:

    标签: python regex python-2.7 newline


    【解决方案1】:
    (?<=\\\\\[-16pt]\n)([\s\S]*?)(?=\\\\\n\\thinhline)
    

    试试这个。使用re.findall。查看演示。

    https://regex101.com/r/vN3sH3/76

    import re
    p = re.compile(r'(?<=\\\\\[-16pt]\n)([\s\S]*?)(?=\\\\\n\\thinhline)')
    test_str = "\\[-16pt]\nx = 5\nprint(x) \n\\\n\thinhline"
    
    re.findall(p, test_str)
    

    【讨论】:

      【解决方案2】:

      我会这样做:

      import re
      string = """\\[-16pt]
      x = 5
      print(x)     
      \\
      \thinhline"""
      
      content = re.sub(r'(?<=\\\[-16pt\]\n)(.*\n)*(?=.*\n\thinhline)', "REPLACED!\n", string, flags=re.MULTILINE)
      print content
      

      问题的一部分是你在转义反斜杠地狱 - 你的原始字符串已经转义斜杠,然后你必须(也许?)双重转义它们,然后你必须转义 @987654322 @ 表达式中的文字。

      部分解决方案是您需要计算开始行和结束行。如果您知道开头有一行,请匹配一次\n,然后在最后一行之前再次匹配\n。希望您可以扩展它并从函数中的变量编译正则表达式。

      最后,您可以使用re.MULTILINE(或简称re.M)标志来匹配多行文本。请记住,. 不匹配换行符,但 \s 在这种情况下应该匹配。

      使用上面的代码,输出为:

      \[-16pt]
      REPLACED!
      \
          hinhline
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-21
        • 1970-01-01
        • 2018-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多