Python的正则表达式
导入模块
import re
相关函数
re.compile() 创建一个正则对象(例:regex1=re.compile(r’\d\d\d’))
search() 传入一个匹配的字符串,输出结果为匹配到的第一个(例:result=regex1.search(‘455或655’),输出结果为:455)
findall() 传入一个匹配的字符串,输出结果为匹配到所有结果,并以列表的形式输出(例:result=regex1.findall(‘455或655’),输出结果为:[‘455’,‘655’])
group() 输出查找匹配的结果,括号中填0或不输入任何值,则直接输出,若输入从1开始的数字,则只输出匹配到的对应的组值,创建正则对象是用()分组(例:regex1=re.compile(r’(\d\d\d)-(\d\d\d-\d\d\d\d))
字符分类
\d 0到9的任意数字
\D 除0到9数字以外的任意字符
\w 任意字母,数字,下划线字符
\W 除字母,数字,下划线的任意字符
\s 空格,制表符,换行符(可理解为匹配的空白字符)
\S 除空格,制表符,换行符以外的字符
匹配类型
? 实现可选匹配 例:re.compile(r’Bat(wo)?man’),匹配Batman或Batwoman都会输出
* 实现零次或多次匹配
+ 实现一次或多次匹配
{} 实现指定次数匹配
实例
import re
phoneNumber=re.compile(r’\d\d\d-\d\d\d-\d\d\d\d’)#创建一个正则对象(匹配对象,\d表示数字)
str=‘my number is 112-151-5443’
str1=phoneNumber.search(str) #向创建的对象传入想要查找的字符串
print(‘phoneNumber:’+str1.group()) #返回匹配的字符串
phoneNumber1=re.compile(r’(\d\d\d)-(\d\d\d-\d\d\d\d)’) #使用括号进行分组
str2=phoneNumber1.search(str)
print(str2.group()) #分组查询编号是从1开始,若不输入或输入为0,就显示全部匹配对象
print(str2.group(0))
print(str2.group(1))#查询第一组值
print(str2.group(2))#查询第二组值
print(str2.groups())#查询所有分组情况并以元组的形式输出
heroRegex1=re.compile(r’Bat(man|woman)’)#使用管道(|)匹配多个分组
strx=‘Batmobile and Batman or Batwoman’
mo1=heroRegex1.search(strx)
print(‘mo1:’+mo1.group()) #search()查询到第一个时就会终止,所以输出结果为Batman
mo2=heroRegex1.findall(strx)#findall()以列表的形式返回所有匹配的对象
print(mo2)
heroRegex2=re.compile(r’Bat(wo)?man’) #使用?实现可选匹配
m1=‘Batman’
m2=‘Batwoman’
print(heroRegex2.search(m1).group())
print(heroRegex2.search(m2).group())
heroRegex3=re.compile(r’Bat(wo)man’) #使用匹配零次或多次
m3=‘Batman’
m4=‘Batwowowoman’
print(heroRegex3.search(m3).group())
print(heroRegex3.search(m4).group())
heroRegex4=re.compile(r’Bat(wo)+man’) #使用+匹配一次或多次
m5=‘Batwoman’
m6=‘Batwowowoman’
print(heroRegex4.search(m5).group())
print(heroRegex4.search(m6).group())
heroRegex5=re.compile(r’(ha){2}’) #使用{}匹配特定次数
m7=‘hahahaha’
print(heroRegex5.search(m7).group())
heroRegex6=re.compile(r’(ha){1,3}’) #贪心匹配,匹配到给定的数值最大的字符串(默认为贪心)
heroRegex7=re.compile(r’(ha){1,3}?’)#在后面加个?,表示非贪心匹配,匹配到给定的数值最小的字符串
print(heroRegex6.search(m7).group())
print(heroRegex7.search(m7).group())