正则表达式以及re模块
一:正则表达式
【1】
(1)定义:一串定义好对字符串操作的方式
(2)作用:用来匹配筛选数据
【2】
(1)模拟场景:http://tool.chinaz.com/regex/
(2)字符串:
(1)定义:在同一个位置可能出现多个字符组成一个组
(2)表现形式:[]
(3)字符组的表现形式:
表达式 | 匹配字符 | 结果 | 解释说明 |
[0123456789] | 6 | True | 匹配0-9任意数字 |
[0-9] | x | False | 匹配数字非字母 |
[a-z] | x | True | 匹配a-z所有小写字母 |
[A-Z] | A | True | 匹配A-Z所有大写字母 |
(4)字符的表现形式:
表达式 | 匹配字符 | 结果 | 说明 |
. | A/@12z | True | 匹配除换行符外所有字符 |
\w | _123Az | True | 匹配数字,字母,下划线 |
\s | 空格 | True | 匹配任意空白符(空格) |
\d | 13165456456 | True | 匹配任意数字 |
\W | @¥ | True | 匹配非字母 数字 下划线 |
\S | asdasd23132__ | True | 匹配非空白符 |
\D | asdasd@# | True | 匹配非数字 |
\n | 换行符(回车键) | True | 匹配一个换行符 |
\t | 制表符(tab键) | True | 可匹配一个制表符 |
\b | asd\b(匹配d) | True | 匹配一个单词的结尾 |
^ | ^asd(匹配a) | True | 匹配一个字符串的开头 |
$ | asd$(匹配d) | True | 匹配一个字符串的结尾 |
a|b | a | True | 匹配a或者b |
() | True | 匹配括号内的表达式 | |
[...] | True | 匹配字符组中的字符 | |
[^1] | 5646598798asdasd | True | 除去扩号内的字符都匹配 |
量词:
表达式 | 作用 |
* | 重复0次或多次 |
+ | 重复1次或多次 |
? | 匹配0次或1次 |
{n} | 重复n次 |
{n,} | 重复n次或多次 |
{n,m} | 重复{n到m次} |
PS:
(1)默认贪婪模式尽可能匹配多的
(2)如果想取消贪婪模式可以用?取消
(5)转义符:
作用:取消表达式的意义
例如:\\n 取消换行的作用
(6)常见非贪婪模式组合
*?:重复任意多次 但是尽可能少重复
+?:重复1次或多次 但是尽可能少重复
??:重复0次或1次 但是尽可能重复
{n,m}:重复n到m次 但是尽可能少重复
{n,}:重复n次以上 但是尽可能少重复
(8).*?:尽量取少的字符
.:任意字符
*:取0次或者多次
?:尽量取少
二:re模块
参数:
(1)findall:会将所有满足条件的数据放入列表中
例如:
import re res = re.findall('a','av ai ') print(res) # ['a', 'a'] # PS:第一个参数正则表达式 第二个参数筛选数据
(2)search:
(1):只匹配第一个属于匹配条件的数据
(2):第一个数据返回值为一串地址
(3):通过.group()调用
(4)如果返回值为None 在调用则报错
例如:
res = re.search('a','av ai ') print(res) # <_sre.SRE_Match object; span=(0, 1), match='a'> print(res.group()) # a res = re.search('c','av ai ') print(res) # None print(res.group()) # 报错
match:
(1):查找正则表达式匹配的第一个字符
(2):如果没有匹配到则返回None
(3):如果返回None的时候 调用会报错
例如:
res = re.match('c','av cai ') print(res) # None print(res.group()) # 报错 res = re.match('a','av cai ') print(res) # <_sre.SRE_Match object; span=(0, 1), match='a'> print(res.group()) # a
re.split:
作用:按照指定元素切割
例如:
ret = re.split('[ab]','abcd') print(ret) # ['', '', 'cd']
# PS:先切割a空出一格 在切割b在空出一格
re.sub
作用:将元素替换
例如:
res = re.sub('\d','H','23156456asd') print(res) # HHHHHHHHasd 全部替换 res = re.sub('\d','H','23156456asd',3) print(res) # HHH56456asd
re.subn:
作用:将元素替换 返回元组
例如:
res = re.subn('\d','H','23156456asd',3) print(res) # ('HHH56456asd', 3) 其中3表示替换的个数
re.compile
作用:
(1)将正则表达式 编译成一个对象
(2)通过调用该对象匹配数据
例如:
obj = re.compile('\d{3}') #将正则表达式编译成为一个 正则表达式对象,规则要匹配的是3个数字 ret = obj.search('abc123eeee') #正则表达式对象调用search,参数为待匹配的字符串 print(ret.group()) #结果 : 123
re.finditer
作用:生成一个迭代器
例如:
ret = re.finditer('\d', 'ds3sy4784a') #finditer返回一个存放匹配结果的迭代器 print(ret) # <callable_iterator object at 0x00000000020BA3C8> 跌代器地址 print(next(ret)) # <_sre.SRE_Match object; span=(2, 3), match='3'> 取值地址 print(next(ret).group()) #3