Python进阶之路 高级编程 正则表达式-匹配任何单个字符

正则表达式-匹配任何单个字符

文本模式字符串都是精确匹配,不过这种精确匹配的作用不打,在正则表达式中,最常用的是匹配一类字符串,而不是一个字符串。所以就需要使用一些特殊符号表示一类字符串。下面将介绍第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'>

猜你喜欢

转载自blog.csdn.net/weixin_45086637/article/details/92800702