我正在尝试从用 # 字符分隔的字符串中提取一个简单的句子。
str = "#text text text \n text#"
用这种模式
pattern = '#(.+)#'
现在,有趣的是当字符串包含换行符时,正则表达式不匹配
out = re.findall(pattern, str) # out contains empty []
但是如果我从字符串中删除 \n 它工作正常。知道如何解决这个问题吗?
我正在尝试从用 # 字符分隔的字符串中提取一个简单的句子。
str = "#text text text \n text#"
用这种模式
pattern = '#(.+)#'
现在,有趣的是当字符串包含换行符时,正则表达式不匹配
out = re.findall(pattern, str) # out contains empty []
但是如果我从字符串中删除 \n 它工作正常。知道如何解决这个问题吗?
还通过re.DOTALL
标志,这使得.
比赛真正的一切。
制作“。” 特殊字符完全匹配任何字符,包括换行符;没有这个标志,'.' 将匹配除换行符以外的任何内容。
re.DOTALL
如果您还希望.
匹配,请使用newline
:-
>>> out = re.findall('#(.+)#', my_str, re.DOTALL)
>>> out
['text text text \n text']
此外,使用内置名称作为变量名也不是一个好主意。使用my_str
而不是str
.
试试这个正则表达式"#([^#]+)#"
它将匹配分隔符之间的所有内容。
将DOTALL
标志添加到您的编译或匹配中。