import re #导入正则模块
# “.”匹配任意1个字符(除了\n之外)
#* 匹配前一个字符出现0次或者无限次,即可有可无
# + 匹配前一个字符出现1次或者无限次,即至少有1次
# ? 匹配前一个字符出现1次或者0次,即要么有1次,要么没有
#[ ] 匹配[ ]中列举的字符
#\d 匹配数字: 0,1,2,3,4,5,6,7,8,9
#\D 匹配非数字, 即不是数字
#\s 匹配空白, 即 空格 和 tab 键
# \S匹配非空白
#\w 匹配单词字符, 即a-z,A-Z,0-9,_,汉字
# \W匹配非单词字符
#{m}匹配前一个字符出现m次 {m}中m的值不要多于字符串的长度
#{m,n} 匹配前一个字符出现从m到n次 最少是m次,最多是n次
# ^有两个作用:1.以什么开头 2.表示对什么取反
# 注意 ^在[]里面才表示不匹配
# \num 引用分组num匹配到的字符串
# (?P<name>) 分组起别名
# (?P=name) 引用别名为name分组匹配到的字符串
#贪婪与非贪婪
# 贪婪匹配:在满足匹配时,匹配尽可能长的字符串,默认情况下,采用贪婪匹配.
# 非贪婪匹配:在满足匹配时,匹配尽可能短的字符串,使用?来表示非贪婪匹配.
# ? 最多匹配一次,最少匹配0次
# .*?是非贪婪模式
# 在*/+/{m,n}等后面加上?, 使贪婪变为非贪婪
# Python中字符串前面加上 r 表示原生字符串
# print(‘python\n123’)
# print(‘python\\n123\\t\\n’)
# print(r’python\n123\t\n’)
#正则方法
# match 从头匹配 返回object 匹配一次 最不常用
#re.match(正则表达式,要匹配的字符串) #从一个字符串的开始位置匹配正则表达式,返回match对象,没有匹配成功返回None –匹配数据
## print(接收数据的变量.group()) –接收数据
#split()根据匹配进行切割字符串,并返回一个列表
# re.split(表达式,字符串)
# search 从头到尾匹配 返回object 匹配一次 较常用
# res = re.search(表达式, 要匹配的字符串) –匹配数据
# print(接收数据的变量.group()) –接收数据
# findall 从头到尾匹配 返回list 匹配所有 最常用
# res = re.findall(表达式, 要匹配的字符串)
#sub() 将匹配到的数据进行替换
# re.sub(表达式(需要被替换的), 替换值, 字符串)
# sub方法会将匹配到的数据替换成其他的值
# group():匹配出来的整体结果
# groups():匹配出来的分组加入元组
#正则举例:
#match 只查询开头
#zz=”python”
#res=re.match(“.”,zz)
#print(res.group()) #结果为:p match会从字符串开始位置查找,一点表示查找任意字符找到就返回结果
#res=re.match(“…..”,zz)
#print(res.group()) #结果为:pytho 想匹配几个字符可以把表达式写几个点
# search 从头到尾匹配找到一个就返回
#zz=”python123″
#res=re.search(“\d”,zz) #\d 查找数字
#print(res.group()) #结果为:1
#res=re.search(“\d+”,zz) #\d和+组合可以取出全部数字,也可以用其它组合
#print(res.group()) #结果为:123
#zz=”abbbbbc”
#res = re.search(‘ab*?’, zz)
#print(res.group()) #结果为:a
# res = re.search(‘ab*’, zz)
# print(res.group()) #结果为:abbbbb
# res = re.search(‘.?’, zz)
# print(res.group()) #结果为:a
# findall 从头到尾匹配会把查找到的全部返回在列表里面
#zz=”张三123李四abc”
#res=re.findall(“\w”,zz) #\w 会匹配数字大小写字母和文字
#print(res) #结果为:[‘张’, ‘三’, ‘1’, ‘2’, ‘3’, ‘李’, ‘四’, ‘a’, ‘b’, ‘c’]
#res=re.findall(“\d”,zz)
#print(res) #结果为:[‘1’, ‘2’, ‘3’]
#res=re.findall(“[a-z]”,zz) #匹配a-z的字母
#print(res) #结果为: [‘a’, ‘b’, ‘c’]
#res=re.findall(“[^a-z]”,zz) #不匹配a-z的字母
#print(res) #结果为:[‘张’, ‘三’, ‘1’, ‘2’, ‘3’, ‘李’, ‘四’]
#split()根据匹配进行切割字符串,并返回一个列表
#zz=”python三3AA”
#res=re.split(“\d”,zz) 以数字把前后分开
#print(res) #结果为:[‘python三’, ‘AA’]
# res=re.split(“三”,zz) #表达式也可以直接填字符在里面
# print(res) #结果为:[‘python’, ‘3AA’]
#sub() 将匹配到的数据进行替换
# zz=”p1y2t3h4o5n”
# res=re.sub(“\d”,””,zz)
# print(res) #结果为:python
# \num 引用分组num匹配到的字符串 num是从1开始
# zz='<html><h1>张三</h1></html>’
# res = re.match(‘<(\w*)><(\w*)>.*</\\2></\\1>’, zz)
# print(res.group()) #结果为:<html><h1>张三</h1></html>
# (?P=name) 引用别名为name分组匹配到的字符串
# zz= ‘<h1><div>张三</div></h1>’
# # n1代表h1, n2代表div
# #res = re.match(‘<(?P<n1>\w*)><(?P<n2>\w*)>.*</(?P=n2)></(?P=n1)>’, zz)
# res = re.match(‘.*’, zz) #结果为:<h1><div>张三</div></h1>
# print(res.group()) #结果为:<h1><div>张三</div></h1>
转载请注明:XAMPP中文组官网 » python基础学习笔记八_正则模块知识