正则表达式以及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

 

posted @ 2019-07-17 18:43  SR丶  阅读(322)  评论(0编辑  收藏  举报