re.DOTALL的使用

2019年9月24日 / 9次阅读 / Last Modified 2019年9月24日
re模块

Python的正则表达式模块re,有一个re.DOTALL的参数。默认情况下,正则表达式中的dot(.),表示所有除了换行的字符,加上re.DOTALL参数后,就是真正的所有字符了,包括换行符(\n)。

Python官方是这样说明的:

re.S
re.DOTALL
Make the '.' special character match any character at all, including a newline; without this flag, '.' will match anything except a newline. Corresponds to the inline flag (?s).

re模块的接口,有了这个参数后,点(.)就能够匹配换行符(\n)。re.S是这个参数的简写。

看一段代码:

>>> a = """\
... 123abc456jkl
... www.pynote.net
... 889977yyuupp
... !@#$%^&*()
... asdfasdf
... """
>>> re.findall('\d+.+', a)
['123abc456jkl', '889977yyuupp']
>>> re.findall('\d+.+', a, re.DOTALL)
['123abc456jkl\nwww.pynote.net\n889977yyuupp\n!@#$%^&*()\nasdfasdf\n']
>>> re.findall('\d+.+!', a, re.DOTALL)
['123abc456jkl\nwww.pynote.net\n889977yyuupp\n!']

以上代码,匹配以一个或多个数字开始的子串,如果不加re.DOTALL这个参数,正则表达式中的点(.)默认匹配到换行符就停止了,但re.findall还回去匹配其它行。而加上这个参数后,直接就匹配了整个多行字符串。

代码最后两行,匹配以数字开始,以!结束的子串,可以看到中间匹配了3此换行符。这就是re.DOTALL的用法。

-- EOF --

本文链接:https://www.pynote.net/archives/1202

留言区

电子邮件地址不会被公开。 必填项已用*标注


前一篇:
后一篇:

More

麦新杰的Python笔记

Ctrl+D 收藏本页


©Copyright 麦新杰 Since 2019 Python笔记

go to top