import re m = re.match('.+t5','dfgt5ab') print (m)#dfgt5ab匹配成功 m = re.match('t5','t5abcd') print (m)#t5abcd匹配成功,从开头就要匹配上 m = re.search('[0-9]','ab45cf') print(m.group(0))#4匹配成功.不一定从开头就匹配上 strr = re.sub('[0-9]', 'f', 'df34gg') print (strr)#dfffgg m = re.findall('[0-9]','54dgg5t') print (m) m = re.split('[0-9]','dgg55t') print (m)
运行结果:
<_sre.SRE_Match object; span=(0, 5), match='dfgt5'>
<_sre.SRE_Match object; span=(0, 2), match='t5'>
4
dfffgg
['5', '4', '5']
['dgg', '', 't']
注意match,search返回的是,匹配成功返回一个正则对象,不成功返回none. 我们可以调用group方法查看匹配到的字符串
m=re.match(r'd+', '102300hhhj')
print (m.group(0))#102300
下面说下group
下面一个正则表达式:
output_(d{4})
该正则表达式用括号()包围了一个小的正则表达式,d{4}。 这个小的正则表达式被用于从结果中筛选想要的信息(在这里是四位数字)。这样被括号圈起来的正则表达式的一部分,称为群(group)。
我们可以m.group(number)的方法来查询群。group(0)是整个正则表达的搜索结果,group(1)是第一个群……
import re m = re.search("output_(d{4})", "output_1986.txt") print (m.group(0))#output_1986 print(m.group(1))#1986
我们还可以将群命名,以便更好地使用m.group查询:
import re m = re.search("output_(?P<year>d{4})", "output_1986.txt") #(?P<name>...) 为group命名 print(m.group("year"))
关于反斜杠:
由于正则表达式使用反斜杠来转义特殊字符,而python自身处理字符串时,反斜杠也是用于转义字符,这样就产生了一个双重转换的问题。
1.比如说普通字符串里的 是换行符,那么正则表达式如何去表达字符串里的这个?答案是是用两个反斜杠,第一个反斜杠起到去掉后面那个反斜杠转义的作用,单纯的表示字符串里的
m=re.match("\n"," ")
print (m)#匹配成功
2.字符串里一个在正则表达式里需要用两个表示,那么字符串里两个在正则表达式里则需要四个表示
m=re.match("\\n","\n")
print (m)#匹配成功
m=re.match("\\n",r" ")
print (m)#与上一个同理,匹配成功
3.在正则表达式前置r表示兼容模式,可以理解为:兼容了正则表达式的规则的字符串,先说明一点,在字符串中,只有在有限的几个字符前面才表示转义,比如后面的这个字符是n,那这个是转义,或者后面的这个字符就是,那前面的第一个也是转义。但如果不是那几个字符,比如9,d,那么就不是转义了,就是单纯的反斜杠
print ("x ")#是转义
print ("\s")#第一个是转义,打印s
print ("9")#不是转义,打印9
print ("d")#不是转义,打印d
所以,在python中字符串'\d'和'd'表示相同的字符 '\d' is 'd'
但是d在正则表达式里确是整数的意思,在正则表达式前面加r,可以理解为,先把这个正则表达式看成字符串,并且这个字符串的规则里加入正则表达式的规则,而后形成的字符串,再去匹配后面的字符串
m=re.match(r"d","5")
print (m)#匹配成功,字符串d表示数字
m=re.match(r"\d","\d")
print (m)#匹配成功,把正则表达式视为加入了正则表达式转义规则的字符串,则\d为字符串\d
m=re.match(r" "," ")
print (m)#匹配长虹
m=re.match(r"\n","\n")
print (m)#匹配成功
ret = re.findall(r'[1-9]',r'qq')
print (ret)#[]
ret = re.findall('[1-9]',r'qq')
print (ret)#正则表达式不加r前缀,此处还是返回空列表,想象为什么
除了d,正则表达式里还有-,d表示数字,-则表示-
m=re.match(r'^d{3}-d{3,8}$', '010-12345')
print (m)#匹配成功