Python模式匹配,如何匹配多行数据
问题
你在尝试使用正则表达式匹配一大段文本,需要跨多行匹配。
解决方案
当您使用dot(.)来匹配任何字符,而你忘记了一个事实,点(。)不能匹配换行符。例如,假设您想尝试匹配C语言分段的注释:
comment=re.compile(r/*(。*?)*/)
text1=/*这是一个注释*/
text2=/*这是一个
.多行注释*/
.
comment.findall(text1)
[这是评论]
comment.findall(text2)
[]
要解决这个问题,您可以修改模式字符串并添加对换行符的支持。例如:
comment=re.compile(r/*((?n)*?)*/)
comment.findall(text2)
[这是n多行注释]
在这种模式下,(?3360. n)指定了非捕获组(即定义了一个仅用于匹配的组,不能单独捕获或编号)。
讨论
re.compile()函数接受一个名为re的标志参数。DOTALL,在这里很有用。它能让。在正则表达式中匹配任何字符,包括换行符。例如:
comment=re.compile(r/*(。*?)*/,re。DOTALL)
comment.findall(text2)
[这是一个n多行注释]对于简单的情况,使用re。DOTALL标记参数,但是如果模式非常复杂或者多个模式组合在一起构成一个字符串标记(在2.18节中有详细描述),那么在使用这个标记参数时可能会出现一些问题。如果有选择的话,最好定义自己的正则表达式模式,这样不需要额外的标记参数也能很好的工作。
推荐教程:以上《Python教程》是Python多行匹配模式的详细内容。更多信息请关注盛行IT软件开发工作室的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。