1

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

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

用这种模式

pattern = '#(.+)#'

现在,有趣的是当字符串包含换行符时,正则表达式不匹配

out = re.findall(pattern, str) # out contains empty []

但是如果我从字符串中删除 \n 它工作正常。知道如何解决这个问题吗?

4

4 回答 4

6

还通过re.DOTALL标志,这使得.比赛真正的一切。

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

于 2012-12-12T15:10:55.987 回答
5

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

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

此外,使用内置名称作为变量名也不是一个好主意。使用my_str而不是str.

于 2012-12-12T15:11:05.397 回答
2

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

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

于 2012-12-12T15:11:06.830 回答
0

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

于 2012-12-12T15:10:50.137 回答