提问人:Xun Yang 提问时间:11/16/2011 最后编辑:daveXun Yang 更新时间:11/16/2011 访问量:22315
正则表达式:如何匹配包含“\n”(换行符)的字符串?
Regular expression: how to match a string containing "\n" (newline)?
问:
我正在尝试使用正则表达式从 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按原样对待它们?
答:
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 : 。结果应该非常有用。\a
len("\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
使 '.' 特殊字符与 全部,包括换行符;如果没有此标志,'.' 将匹配任何内容 除了换行符。
评论