正则表达式-匹配任何单个字符
文本模式字符串都是精确匹配,不过这种精确匹配的作用不打,在正则表达式中,最常用的是匹配一类字符串,而不是一个字符串。所以就需要使用一些特殊符号表示一类字符串。下面将介绍第1个可以匹配一类字符串的特殊符号:点(.
)。这个符号可以匹配任意一个单个字符。
m = re.match('.ind','bind') # 匹配成功
在上面的代码中,文本模式字符串是’.ind’,第1个字符是(.
),表示可以匹配任意一个字符串。也就是说,待匹配的字符串,只要以’.ind’开头,都会匹配成功,其中.
可以表示任意一个字符,例如,‘bind’、‘xind’、‘5ind’都可以和文本模式字符串’.ind’成功匹配。
使用.
符号会带来一个问题,如果要匹配真正的点(.)字符,应该如何做呢?要解决这个问题,需要使用转义符\
或r
。
m = re.match('\.ind','bind') # 匹配失败
在上面的代码中,由于使用了转义符修饰点.
符号,所以这个点就变成了真正的字符点(.),所以匹配’bind’很显然就失败了,应该把待匹配字符串修改成’.ind’才会匹配成功。
[例 11.4] 本例使用了.
符号匹配任意一个字符,并使用转义符\
将点符号变成真正的(.)点字符,通过这个例子可以更彻底的理解点符号的用法。
import re
s = 'bin.' # 使用了点(.)符号的文本模式字符串
m = re.match(s,'bind') # 匹配成功
if m is not None:
print(m.group()) # 输出结果:bind
m = re.match(s,'bin') # 匹配失败
print(m) # 输出结果:None
m = re.search(s,'<bind>') # 搜索成功
print(m.group()) # 输出结果:bind
print(m) # 输出结果:<re.Match object; span=(1, 5), match='bind'>
s1 = '3.14' # 使用了点(.)符号的文本模式字符串
s2 = r'3.14' # 使用了转义符r将点(.)变成真正的点字符
m = re.match(s1,'3.14') # 匹配成功,因为点字符同样也是一个字符
print(m.group()) # 输出结果:3.14
m = re.match(s1,'3014') # 匹配成功,3和14之间可以是任意字符
print(m.group()) # 输出结果:3014
m = re.match(s2,'3.14') # 匹配成功
print(m.group()) # 输出结果:3.14
m = re.match(s2,'3014') # 匹配失败,因为中间的0并不是点(.)字符
print(m) # 输出结果:<re.Match object; span=(0, 4), match='3014'>
输出结果:
bind
None
bind
<re.Match object; span=(1, 5), match='bind'>
3.14
3014
3.14
<re.Match object; span=(0, 4), match='3014'>