我正在尝试从用#字符分隔的字符串中提取一个简单的句子。
str = "#text text text \n text#"
使用此模式
pattern = '#(.+)#'
现在,有趣的是当字符串包含换行符
时,正则表达式不匹配out = re.findall(pattern, str) # out contains empty []
但如果我从字符串中删除\ n它工作正常。任何想法如何解决这个问题?
答案 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
标志添加到您的编译或匹配。