import re #导包
#正则模块,针对字符串
#正则本身其实就是一种小型的,高度专业化的编程语言,底层是由C语言编写的匹配引擎执行,效率高,速度快
1、正则内容
**特殊字符**:
\w 数字,字母,下划线
\W 非数字字母下划线
\b 单词边界
\B
\s 空格
\S 非空格
\d 数字
\D 非数字
\t 制表符(Tab键)
. 除了换行以外的任意字符
\r 回车
^ 匹配开头,在[]中表示不匹配
$ 匹配结尾
**量词**:
{n} 匹配n次
{n,m} 匹配最少n次,最多m次
+ 匹配1次或多次
* 匹配0次或多次
? 匹配0次或1次
**分组**:
()
(x|y) 匹配x或者y
x(?:) 匹配x但不记住
x(?=y) 匹配x并且后面必须是y
x(?!y) 匹配x并且后面必须不是y
对于匹配,匹配的结果会保存到\1\2\3。。。中,目前应用到re.sub替换的字符串中
或:
[xyz] 匹配x或y或z
[x|y] 匹配x或|或y,这个其实不准确,应该用\|转义写
eg:[0-9] 匹配0-9中任意一个
[a-z] 同理
[A-Z]
[a-zA-Z0-9]
[\u4e00-\u9fa5]
[A-z] 中间有 [ \ ] ^ _ , 这几个字符
2、python正则内容
-
(?P ) #?P<>定义组里匹配内容的key(键),<>里面写key名称,值就是匹配到的内容(只对正则函数返回对象的有用)
-
如果返回了匹配的对象,则对象方法为:
group()
#获取匹配到的所有结果,不管有没有分组将匹配到的全部拿出来,有参取匹配到的第几个如2groups()
#获取模型中匹配到的分组结果,只拿出匹配到的字符串中分组部分的结果groupdict()
#获取模型中匹配到的分 组结果,只拿出匹配到的字符串中分组部分定义了key的组结果
re库方法
#3、search()函数
#search,浏览全部字符串,匹配第一符合规则的字符串,浏览整个字符串去匹配第一个,未匹配成功返回None
#search(pattern, string, flags=0)
# pattern: 正则模型
# string : 要匹配的字符串
# falgs : 匹配模式
# 4、match()函数
# 匹配的是从字符串开始的位置开始匹配,而search()匹配的是字符串全局匹配第一个合规则的字符串,参数和search()一样
# 5、findall()函数(以后常用)
# findall(pattern, string, flags=0)
# pattern: 正则模型
# string : 要匹配的字符串
# falgs : 匹配模式
# 浏览全部字符串,匹配所有合规则的字符串,匹配到的字符串放到一个列表中,未匹配成功返回空列表
# 注意:一旦匹配成,再次匹配,是从前一次匹配成功的,后面一位开始的,也可以理解为匹配成功的字符串,不在参与下次匹配
# 6、split()函数
# 根据正则匹配分割字符串,返回分割后的一个列表
# split(pattern, string, maxsplit=0, flags=0)
# pattern: 正则模型
# string : 要匹配的字符串
# maxsplit:指定分割个数
# flags : 匹配模式
# 7、 sub()函数
# 替换匹配成功的指定位置字符串
# sub(pattern, repl, string, count=0, flags=0)
# pattern: 正则模型
# repl : 要替换的字符串
# string : 要匹配的字符串
# count : 指定匹配个数
# flags : 匹配模式
# 8、subn()函数
# 替换匹配成功的指定位置字符串,并且返回替换次数,可以用两个变量分别接受
# subn(pattern, repl, string, count=0, flags=0)
# pattern: 正则模型
# repl : 要替换的字符串
# string : 要匹配的字符串
# count : 指定匹配个数
# flags : 匹配模式
#============Test======================
print('-------------------------')
str = "hello alex bcd alex lge alex acd 19"
regex1 = r'a\w+\b' #正常测试
regex2 = r'a(\w+)' #一个分组
regex3 = r'(a)((\w+)(e))' #多个分组,分组套分组
regex4 = r'(?P<n1>\w+)' #定义匹配内容里面的key(键),<>里面写key的名称,值就是匹配的内容
regex5 = r'a(?P<n1>\w+).*(?P<n2>\d)' #多个分组key
regex7 = r'a(?:\w+)'
regex8 = r'a(?=l)\w+'
regex9 = r'a(?!l)\w+'
regex10 = r'h\w+' #用于match匹配
#search_Test
res = re.search(regex1,str)
print('res1:',res,'==>group:',res.group(),'==>groups:',res.groups(),'==>groupdicts:',res.groupdict())
res = re.search(regex2,str)
print('res2:',res,'==>group:',res.group(),'==>groups:',res.groups