问题:用正则表达式对一段文本块做匹配,但是希望在进行匹配时能够跨越多行
解决方案:
1、正则表达式添加对换行符的支持;
2、re.compile()函数一个有用的标记-re.DOTALL使得正则表达式中的句点(.)可以匹配所有的字符,也包括换行符;
如上问题一般出现在希望使用句点(.)来匹配任意字符,但是忘记了句点并不能匹配换行符时。例如,假设想匹配C语言风格的注释:
import retext = '''/* this is a... multiline comment */...'''comment = re.compile(r'/\*(.*?)\*/')print(comment.findall(text))comment2 = re.compile(r'/\*((?:.|\n)*?)\*/') #(?:.|\n)指定了一个非捕获组(即,这个组只做匹配但不捕获结果,也不会分配组号)print(comment2.findall(text))comment_dotall=re.compile(r'/*(.*?)\*/',re.DOTALL)print (comment_dotall.findall(text))
>>> ================================ RESTART ================================>>> [][' this is a\n... multiline comment ']['* this is a\n... multiline comment ']>>>