正则表达式:如何匹配包含“\n”(换行符)的字符串?

Regular expression: how to match a string containing "\n" (newline)?

提问人:Xun Yang 提问时间:11/16/2011 最后编辑:daveXun Yang 更新时间:11/16/2011 访问量:22315

问:

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

示例(我正在使用 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>'")
[]

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

Python 正则表达式 转义 换行符

评论


答:

32赞 Adam Zalcman 11/16/2011 #1

您应该使用以下选项:DOTALL

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

这个

评论

0赞 Xun Yang 11/16/2011
谢谢!此外,例如,如果我在字符串中说“\a”,它将转换为“\x07”。有没有办法让它们保持原样?或者,当我将它们放入数据库时并不重要?
1赞 Adam Zalcman 11/16/2011
\x07只是 Python 用代码 7 表示字符的一种方式。另一种表示方式是写 .在这两种情况下,字符串实际上只包含一个字符。您可以通过检查 和 来确认这一点。还可以尝试比较或搜索 in : 或 for in : 。结果应该非常有用。\alen("\x07")len("\a")"\a" == "\x07""a""\a""\a".find("a")"0""\x07""\x07".find("0")
0赞 Xun Yang 11/16/2011
嗨,亚当!它仍然会带来一个问题,如果源字符串包含 \' 结果将被转换为 ',这将破坏 sql 命令。因此,拥有字符串“原样”很重要
4赞 stema 11/16/2011 #2

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

再。S
re.DOTALL
使 '.' 特殊字符与 全部,包括换行符;如果没有此标志,'.' 将匹配任何内容 除了换行符。

在 docs.python.org 上看到它