正则表达式
Posted fengzi759
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式相关的知识,希望对你有一定的参考价值。
-
-
re模块使Python语言拥有了全部的正则表达式功能
-
-
re模块简介
-
导入re模块
-
import re
-
-
re.match函数
-
原型:re.match(pattern,string,flags = 0)
-
参数:
-
patter 匹配的正则表达式
-
string 要匹配的字符串
-
flags:标志位,用于控制正则表达式的匹配方式
-
值如下
-
re.I 忽略大小写
-
re.L 做本地户识别
-
re.M 多行匹配,影响^ 喝$
-
re.S 是. 匹配包括换行符在内的所有字符
-
re.U 根据Unicode 字符集 解析字符 影响w W B
-
re.X 使我们以更灵活的格式理解正则表达式
-
-
-
-
功能:尝试从字符串的起始位置匹配一个模式,如果不是起始位置,匹配成功的话,返回None
-
-
re.search函数
-
原型 re.search(patter,string,flags =0)
-
参数
-
patter 匹配的正则表达式
-
string 要匹配的字符串
-
flags:标志位,用于控制正则表达式的匹配方式
-
值如下
-
re.I 忽略大小写
-
re.L 做本地户识别
-
re.M 多行匹配,影响^ 喝$
-
re.S 是. 匹配包括换行符在内的所有字符
-
re.U 根据Unicode 字符集 解析字符 影响w W B
-
re.X 使我们以更灵活的格式理解正则表达式
-
-
-
-
功能
-
扫描整个字符串,并返回第一个成功的匹配
-
-
-
re.findall函数
-
原型 re.findall(patter,string,flags =0)
-
参数
-
patter 匹配的正则表达式
-
string 要匹配的字符串
-
flags:标志位,用于控制正则表达式的匹配方式
-
值如下
-
re.I 忽略大小写
-
re.L 做本地户识别
-
re.M 多行匹配,影响^ 喝$
-
re.S 是. 匹配包括换行符在内的所有字符
-
re.U 根据Unicode 字符集 解析字符 影响w W B
-
re.X 使我们以更灵活的格式理解正则表达式
-
-
-
-
功能:
-
扫描整个字符串,并返回结果列表
-
-
-
正则表达式的元字符
-
匹配单个字符与数字
-
. 匹配除换行符以外的任意字符
-
[0123456789] []是字符集合,表示匹配方括号所包含的任意一个字符
-
[sunck] 匹配 ‘s‘,‘u‘,‘n‘,‘c‘,‘k‘ 中任意一个字符
-
[a-z] 匹配任意
-
[A-Z] 匹配任意大写字母
-
[0-9] 匹配任意数字,类似[0123456789]
-
[0-9a-zA-Z] 匹配任意的数字和字母
-
[0-9a-zA-Z_] 匹配任意的数字和字母和下划线
-
[^sunck] 匹配除了sunck这几个字母以外的所有字符,中括号里的^称为脱字符,表示不匹配集合中的字符
-
[^0-9] 匹配所有的非数字字符
-
d 匹配数字,效果同[0-9]
-
D 匹配非数字字符,效果同 [ ^ 0-9]
-
w 匹配数字,字母和下划线 效果同[0-9a-zA-Z_]
-
W 匹配非数字、字母和下划线,效果同[ ^0-9a-zA-Z_]
-
s 匹配任意的空白符(空格、换行、换页,制表、回车),效果同[ f ]
-
S 匹配任意的非空白符 效果同(^ f )
-
-
锚字符(边界字符)
-
^ 行首匹配,和在[]里的^ 不是一个意思
-
$ 行尾匹配
-
A 匹配字符串开始,它和^的区别是,A只匹配整个字符串的开头,即使在re.M模式下也不会匹配它行的行首
-
匹配字符串结束,它和$的区别是,只匹配整个字符串的结束,即使在re.M模式下也不会匹配它行的行尾
-
匹配一个单词的边界,也就是此单词和空格间的位置
-
‘er‘ 可以匹配never,不能匹配nerve
-
-
B 匹配非单词边界
-
-
匹配多个字符
-
说明:下方的x、y、z均为假设的普通字符,n,m(非负整数),不是正则表达式的元字符
-
(xyz) 匹配小括号里面的xyz(作为一个整体去匹配)
-
x? 匹配0个或者1个x
-
#非贪婪匹配(尽可能少的匹配)
-
-
x* 匹配0个或者任意多个x(.* 表示匹配0个或者任意多个字符(换行符除外))
-
#贪婪匹配(尽可能多的匹配)
-
-
x+ 匹配至少一个x
-
#贪婪匹配(尽可能多的匹配)
-
-
x{n} 匹配确定的n个x(n是一个非负整数)
-
x{n,} 匹配至少n个x,
-
#贪婪匹配(尽可能多的匹配)
-
-
x{n,m} 匹配至少n个最多m个x 注意:n<=m
-
x|y |表示或、匹配的是x或y
-
-
特殊
-
*? +? x? 最小匹配 通常都是尽可能多的匹配,可以使用这种解决贪婪匹配
-
(?:x) 类似(xyz),但不表示一个组
-
-
-
re模块深入
-
字符串切割
-
re.split(patter,string)
-
patter 匹配的正则表达式
-
string 要匹配的字符串
-
-
-
re.finditer函数
-
原型
-
re.finditer(patter,string,flags =0)
-
-
参数:
-
patter 匹配的正则表达式
-
string 要匹配的字符串
-
flags:标志位,用于控制正则表达式的匹配方式
-
值如下
-
re.I 忽略大小写
-
re.L 做本地户识别
-
re.M 多行匹配,影响^ 喝$
-
re.S 是. 匹配包括换行符在内的所有字符
-
re.U 根据Unicode 字符集 解析字符 影响w W B
-
re.X 使我们以更灵活的格式理解正则表达式
-
-
-
-
功能:与findall类似,扫描整个字符串,返回的是一个迭代器
-
-
字符串的替换和修改
-
re.sub(pattern,repl,string,count = 0,flags=0)
-
re.subn(pattern,repl,string,count =0,flags = 0)
-
参数
-
pattern : 正则表达式(规则)
-
repl : 指定的用来替换的字符串
-
string: 目标字符串
-
count: 最多替换次数
-
-
功能:
-
在目标字符串中,以正则表达式的规则匹配字符串,在把他们替换成指定的字符串,可以指定替换的次数,如果不指定,替换所有的匹配字符串
-
-
区别:
-
前者返回一个被替换的字符串,后者返回一个元组(第一个元素表示被替换的字符串,第二个元素表示被替换的次数)
-
-
-
-
分组
-
概念: 除了简单的判断是否匹配之外,正则表达式还有提取子串的功能。用()表示的就是提取分组
-
举例
-
str6 = "010-53247654"
-
m = re.match(r"(?P<first>d{3})-(d{8}),str6)
-
?P<first> 是给组取名字
-
print(m.group(first)) 取的就是那组的数据
-
-
print(m.group(0))
-
print(m.group(1))
-
print(m.group(2))
-
使用序号获取对应组的信息,group(0)一直代表的原始字符串
-
-
print(m.groups())
-
查看匹配的各组的情况
-
-
-
-
编译
-
当我们使用正则表达式时,re模块会干两件事
-
编译正则表达式,如果正则表达式本身不合法,会报错
-
re.compile(pattern,flags=0)
-
pattern: 要编译的正则表达式
-
举例
-
pat = r"^1(([3578]d)|(47))d{8}$"
-
#编译成正则对象
-
re_telephon = re.compile(pat)
-
re_telephon .match(136000000)
-
-
-
-
-
-
以上是关于正则表达式的主要内容,如果未能解决你的问题,请参考以下文章