【问题标题】:Regular expression: how to match a string containing "\n" (newline)?正则表达式:如何匹配包含“\n”(换行符)的字符串?
【发布时间】:2011-11-16 19:20:00
【问题描述】:

我正在尝试使用正则表达式从 SQL 导出文件中转储数据。为了匹配帖子内容的字段,我使用'(?P<content>.*?)'。它在大多数情况下都可以正常工作,但是如果该字段包含 '\n' 字符串,则正则表达式将不匹配。如何修改正则表达式以匹配它们?谢谢!

示例(我正在使用 Python):

>>> re.findall("'(?P<content>.*?)'","'<p>something, something else</p>'")
['<p>something, something else</p>']

>>> re.findall("'(?P<content>.*?)'","'<p>something, \n something else</p>'")
[]

附:似乎所有前面带有“\”的字符串都被视为转义字符。我怎样才能告诉 regx 按原样对待它们?

【问题讨论】:

    标签: python regex escaping line-breaks


    【解决方案1】:

    您应该使用DOTALL 选项:

    >>> re.findall("'(?P<content>.*?)'","'<p>something, \n something else</p>'", re.DOTALL)
    ['<p>something, \n something else</p>']
    

    this

    【讨论】:

    • 谢谢!另外,举例来说,如果我在字符串中说 '\a',它将被转换为 '\x07'。有没有办法让它们保持原样?或者我将它们放入数据库时​​是否无关紧要?
    • \x07只是python用代码7表示字符的一种方式。另一种表示方式是写\a。在这两种情况下,字符串实际上只包含一个字符。您可以通过检查len("\x07")len("\a") 来确认这一点。还可以尝试比较"\a" == "\x07" 或在"\a" 中搜索"a""\a".find("a") 或在"\x07" 中搜索"0""\x07".find("0")。结果应该非常有用。
    • 嗨,亚当!它仍然存在问题,如果原始字符串包含 \' 结果将转换为 ',这将破坏 sql 命令。所以让字符串“原样”很重要
    【解决方案2】:

    您需要 Dotall 修饰符,以使点也匹配换行符。

    re.S
    re.DOTALL
    制作“。”特殊字符匹配任何字符 全部,包括换行符;没有这个标志,'.'将匹配任何东西 除了换行符。

    here on docs.python.org

    【讨论】:

      猜你喜欢
      • 2016-04-21
      • 2013-10-27
      • 2021-08-08
      • 2022-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-26
      相关资源
      最近更新 更多