长亭百川云 - 文章详情

python正则表达式记录 - magic_zero

博客园 - magic_zero

46

2024-07-19

元字符:

*  星号   它指定前一个字符可以被匹配零次或更多次 

\>>> re.match('a\[bcd\]\*b', 'abcbdabcd').group()
'abcb'
>>> re.match('a\[bcd\]\*b', 'abcbdbcd').group()
'abcbdb'
>>>

匹配a和b之间的字符,如果有,那么继续直到没有为止。所以它是贪婪匹配。

如果a和b之间有字符,但是不是bcd中的任意一个那么将会停止,取到上次匹配的结果。

+  加号   指定前边的字符一次或者更多次。区别于 * 的是,至少需要一次。

\>>> re.match('c+t', 'ctct').group()
'ct'
>>> re.match('c+t', 'tct').group()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
>>>

+  是非贪婪匹配。只要满足条件找到一个就结束。

?  问号   匹配一次或零次  可以认为它用于标识某事物是可选的。例如:home-?brew 匹配 "homebrew" 或 "home-brew"。

\>>> re.match('www-?mmm', 'www-mmm').group()
'www-mmm'
>>> re.match('www-?mmm', 'wwwmmm').group()
'wwwmmm'
>>>

可以看到有无 - 减号都可以

最复杂的重复限定符是 {m,n}(注意m,n之间不能有空格),其中 m 和 n 是十进制整数。

该限定符的意思是至少有 m 个重复,至多到 n 个重复。

举个例子,a/{1,3}b 将匹配 "a/b","a//b" 和 "a///b"。它不能匹配 "ab" 因为没有斜杠,也不能匹配 "a////b" ,因为有四个。

\>>> re.match('a/{1,3}b', 'a/b').group()      #一个斜杠
'a/b'
>>> re.match('a/{1,3}b', 'ab').group()       #没有斜杠
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
>>> re.match('a/{1,3}b', 'a////b').group()    #四个斜杠
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
>>>

细心的读者也许注意到其他三个限定符都可以用这样方式来表示。

{0,}  等同于 *,{1,}  等同于 +,而 {0,1} 则与 ? 相同。

如果可以的话,最好使用 *,+,或?。很简单因为它们更短也更容易懂。

.    点号    匹配任何除了换行以外的字符,在 alternate 模式(re.DOTALL)下它甚至可以匹配换行。

系统预设特殊字符:

\d 匹配任何十进制数;它相当于类 [0-9]。
\D 匹配任何非数字字符;它相当于类 [^0-9]。
\s 匹配任何空白字符;它相当于类 [ \t\n\r\f\v]。
\S 匹配任何非空白字符;它相当于类 [^ \t\n\r\f\v]。
\w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。
\W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]。

分组:

\>>> re.match('(a(b(c)))d', 'abcd').group()
'abcd'
>>> re.match('(a(b(c)))d', 'abcd').group(0)
'abcd'
>>> re.match('(a(b(c)))d', 'abcd').group(1)
'abc'
>>> re.match('(a(b(c)))d', 'abcd').group(2)
'bc'
>>> re.match('(a(b(c)))d', 'abcd').group(3)
'c'
>>>

我们可以看出,这是典型的剥洋葱模式。从外层开始,一层一层向内。最内层的分组将依次被放在从索引为0开始的一个_sre.SRE_Match object中。

相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2