如果包含换行符,则正则表达式失败

时间:2012-12-12 15:09:07

标签: python

我正在尝试从用#字符分隔的字符串中提取一个简单的句子。

str = "#text text text \n text#"

使用此模式

pattern = '#(.+)#'

现在,有趣的是当字符串包含换行符

时,正则表达式不匹配
out = re.findall(pattern, str) # out contains empty []

但如果我从字符串中删除\ n它工作正常。任何想法如何解决这个问题?

4 个答案:

答案 0 :(得分:5)

如果您希望re.DOTALL.匹配,请使用newline: -

>>> out = re.findall('#(.+)#', my_str, re.DOTALL)
>>> out
['text text text \n text']

此外,使用内置名称作为变量名称并不是一个好主意。使用my_str代替str

答案 1 :(得分:4)

同时传递re.DOTALL标记,这使得.匹配真正的一切。

  

制作'。'特殊字符匹配任何字符,包括换行符;没有这个标志,'。'将匹配除换行符之外的任何内容。

答案 2 :(得分:2)

试试这个正则表达式"#([^#]+)#"

它将匹配分隔符之间的所有内容。

答案 3 :(得分:0)

DOTALL标志添加到您的编译或匹配。