正则表达式
1.原子是正则表达式中最基本的组成单位,每个正则表达式中至少要包含一个原子(python自带re模块)
常见原子类型如下:
a.普通字符作为原子
b.非打印字符作为原子
c.通用字符作为原子
d.原子表
import re string = "123aaa" # 普通字符作为原子 pat = "123" rst = re.search(pat,string) print(rst) # 非打印字符作为原子 # \n 换行符 \t 制表符 string = '''bbb ddd ''' pat = "\n" rst = re.search(pat,string) print(rst) # 通用字符作为原子 ''' \w 字母,数字,下划线 \W 除字母,数字,下划线 \d 十进制数 \D 除十进制数 \s 空白字符 \S 除空白字符 ''' string = "jfjfj222 344hdh" pat = "\w\d\s\d" rst = re.search(pat,string) print(rst) # 原子表 string = "jfjfj222 344hdh" pat = "jf[jfgs]f" pat = "jf[^jfgs]f" rst = re.search(pat,string) print(rst)
2.元字符是正则表达式中具有一些特殊含义的字符,比如重复N次前面的字符等
# 元字符 ''' . 除换行符外的所有字符 ^ 开始位置 $ 结束位置 * 0/1/多次 ?0/1次 + 1/多次 {n} 恰好n次 {n,} 至少n次 {n,m} 至少n次,至多m次 | 模式选择符或 () 模式单元 ''' string = "jfjfj222344hdh" pat = "jf." pat = "^jf." pat = "hd.$" pat = "j2[3]" pat = "j2[2,]" pat = "j2[1,2]" rst = re.search(pat,string) print(rst)
3.模式修正符指可以在不改变正则表达式的情况下,通过模式修正符高边正则表达式的含义,从而实现一些匹配结果的调整
# 模式修正符 ''' | 匹配时忽略大小写 * M 多行匹配 * L 本地化识别 U unicode S 让.匹配包括换行符 * ''' string = "Python" pat = "pyt" rst=re.search(pat,string,re.I) print(rst)
4.贪婪模式与懒惰模式
贪婪模式的核心是尽可能多的匹配,懒惰模式的核心是尽可能少的匹配
# 贪婪模式与懒惰模式 string = "Pythony" pat1 = "p.*y" #贪婪模式 pat2 = "p.*?y" #懒惰模式 精准 rst=re.search(pat1,string,re.I) rst2=re.search(pat2,string,re.I) print(rst) print(rst2)
5.正则表达式函数
正则表达式函数re.match()函数,re.search()函数,全局匹配函数,re.sub()函数
# 正则表达式函数 # 1、match 从开头进行匹配 string = "Pythony" pat1 = "p.*?y" #懒惰模式 精准t pat2 = "t.*?y" #懒惰模式 精准 rst1=re.match(pat1,string,re.I) rst2=re.match(pat2,string,re.I) print(rst1) print(rst2) # 2、search 从任意地方进行匹配 # 3.全局匹配函数 string = "Pwwythonpoyfsurerapay" pat1 = "p.*?y" #懒惰模式 精准 # 全局匹配格式re.compile(正则表达式).findall(数据) rst=re.compile(pat1,re.I).findall(string) print(rst)
6.常见正则实例
匹配网址.com/.cn和电话号码
# 实例:匹配.com和.cn网址 string="<a href='http://www.baidu.com'>百度首页</a>" pat = "[a-zA-Z]+://[^\s]*[.com|.cn]" rst=re.compile(pat,re.I).findall(string) print(rst) # 实例:匹配电话号码 11位 string="djdhf027-5548742113300hkdfghkdfg0321-67093388282272727gurutrpp" pat="\d{4}-\d{7}|\d{3}-\d{8}" rst=re.compile(pat,re.I).findall(string) print(rst)