重复、可选和特殊字符
正则表达式中最常见的就是匹配一些重复的字符串,例如,匹配3个连续出现的a(aaa符合要求),或匹配至少出现一个0的字符串(0、00、000都符合要求)。要对这种重复模式进行匹配,需要使用两个符号:"*"
和"+"
。其中,"*"
表示字符串出现0次到n次,"+"
表示字符串出现1到n次。
s = 'a*'
strlist = ['','a','aa','baa']
for value in strlist:
m = re.match(s,value)
print(m)
在上面的代码中,a后面使用*
进行修饰,这就意味着该模式会匹配0到n个a,也就是说,’’、‘a’、‘aa’、‘aaa’都可以匹配成功。所以很容易理解为什么strlist列表中前三个元素可以匹配成功。但是,为什么’baa’也可以匹配成功呢?这是因为'a*'
可以匹配空串,而任何字符串都可以认为是以空串作为前缀的,所以’baa’只是空串的后缀,因此'a*'
可以成功匹配’baa’。
s = 'a+'
strlist = ['','a','aa','baa']
for value in strlist:
m = re.match(s,value)
print(m)
如果对’a’使用"+"
符号,就意味着’a’至少要出现1次,所以空串自然无法匹配成功,这就是’'和’baa’都无法匹配成功的原因。
前面的例子都是重复一个字符,如果要想将多个字符作为一组重复,需要用一对圆括号将这个字符串括起来。
s = '(abc)+'
print(re.match(s,'abcabcabc'