Python学习------正则表达式(元字符,贪婪模式,分组,匹配函数)

一.定义

1.定义:

正则表达式是一种高级文本匹配模式,提供了搜索,替代等功能。本质是由一系列特殊符号和字符组成的字符串,这个表达式描述了字符和字符的重复行为,可以匹配一类特征的字符串

2.特点:

(1)方便进行检索和修改
(2)支持的语言很多
(3)灵活多样

二.元字符

1.普通字符

说明:普通字符匹配的就是本身
示例:

import re 
print(re.findall("abc","abcedabc"))#得到['abc','abc'],即匹配的就是'abc'本身

2.或( x | y)

说明:匹配的是 x 或者 y,如果x和y有重合部分,那么在findall方法里面,如果匹配到x,则不会再匹配y
示例:

import re
print(re.findall("ab|bd","abdabbd"))#打印结果是['ab', 'ab', 'bd']

3.匹配单一字符( . )

说明:匹配除了换行之外的任意字符,左右两个字符串键有一个字符,两个点代表两个字符
示例;

import re
print(re.findall("ab.ab","abdabbd"))#匹配结果['abdab']

4.匹配开始位置( ^ )

说明:匹配以某个字符串开头的字符串
示例:

import re
print(re.findall('^ab","abdabbd"))#匹配结果['ab']

5.匹配结束位置( $ )

说明:匹配以某个字符串为结尾的字符串

6.匹配重复( * )

说明:匹配前面的正则表达式重复0 次或多次
示例:

import re
print(re.findall("ab*","abddabbda"))
#打印结果 ['ab', 'abb', 'a']
print(re.findall(".*","abddabbda")
#匹配任意字符串

7.匹配重复( + )

说明:匹配的字符串至少出现一次

import re
print(re.findall(".+txt$","1.txt"))#匹配以txt结尾前面有任意多个字符

8.匹配重复 ( ?)

说明:匹配前面的正则表达式重复0次或一次

import re
print(re.findall("tx?","txttxt"))#得到['tx', 't', 'tx', 't']

9.匹配重复({n})

说明;指定匹配的次数n
示例:

import re
print(re.findall("tx{3}","txxxxx"))#得到['txxx']

10.匹配重复({m,n})

说明:匹配前面的正则表达式重复 m 到 n次
示例:

ab{1,3}  匹配的是ab,abb,abbb

11.匹配字符集合( [ ] )

说明:匹配括号 [ ] 内的任意一个字符
示例:

[a-z]    #匹配小写英文字母
[A-Z]    #匹配大写英文字母
[0-9]    #匹配数字
[0-9a-zA-Z] #组合使用

12.匹配字符集合( [ ^… ] )

匹配规则:匹配除指定字符集之外的任意字符

13.匹配任意(非)数字字符(\d 或者 \D)

说明:\d匹配任意数字字符,\D匹配任意非数字字符
示例:

import re
print(re.findall("1\d{10}",'13134566666'))#匹配电话号码

14.匹配(非)普通字符(普通字符:数字字母下划线)( \w 或者 \W)

说明:\w匹配任意一个普通字符,\W匹配任意非普通字符

15.匹配(非)空字符串

说明:\s匹配任意空字符,\S匹配任意非空字符串,注意\n ,\t,\r 这些没办法作为字符匹配出来,所以会被归为空字符

16.匹配起止位置(\A \Z)

说明:\A匹配开始位置,\Z匹配结束位置
示例:

绝对匹配:\Aabcd\Z# 匹配abcd且只是abcd

17.匹配(非)单词起始位置(\b \B)

说明:\b匹配单词边界,\B匹配非单词边界
单词边界:数字字母下划线和其他字符交界的位置为单词的边界
示例:

#匹配单词 is
import re
print(re.findall(r"\bis\b",'This is a dog')) #得到 ['is']

18.总结:

(1)匹配单个字符

a , \d , \D , \w , \W , \s , \S , [...] ,[^...]

(2)匹配重复字符

* , ? , + , {m} , {m,n}

(3)匹配某个位置

^ , $ , \b , \B , \A , \Z 

三.转义字符

1.正则表达式特殊符号

. ,  * , ? , $ , '' , "" , [] , {} , () , \ , ^

2.匹配

特殊符号匹配用反斜杠
示例:

import re
print(re.findall('\"\.\"','This is"." .'))#得到结果 ['"."']

四.贪婪和非贪婪

正则表达式默认的匹配是贪婪模式,即尽可能多的向后匹配,(* + ? {m,n} )这四种情况下是贪婪模式
如果要变成非贪婪模式,在对应符号后面加上问号即可

五.正则表达式分组

1.说明:

使用括号可以为一个正则表达式建立一个子组,子组可以看作内部的整体

2.作用:

(1)增加子组后对正则表达式整体的匹配内容没有影响
(2)子组可以改变重复元字符的重复行为
(3)子组在某些操作中可以对子组匹配内容单独提取

3.注意事项:

(1)每个正则表达式可以有多个子组,按照从外到内,从左到右的顺序排列
(2)子组不要交叉

六.捕获组和非捕获组

1.子组命名格式

(?P<name>abcd)

2.作用

(1)很多编程接口可以直接通过名字获取子组匹配内容
(2)捕获组中的正则表达式可以通过名字重复调用
示例:

(?P<zimu>abcd)efg(?P=zimu)#相当于abcdefgabcd

三.Python使用

在这里插入图片描述

1.compile

(1)简介:

compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供其他方法使用。

(2)语法格式:

re.compile(pattern[, flags]) 
#参数:
pattern : 一个字符串形式的正则表达式
flags 可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为:
re.I 忽略大小写
re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
re.M 多行模式
re.S 即为' . '并且包括换行符在内的任意字符(' . '不包括换行符)
re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
re.X 为了增加可读性,忽略空格和' # '后面的注释

(3)compile对象属性方法

re模块没有

flags           # 标志位
groupindex # 捕获组,形成的字典
groups        # 子组个数
pattern        # 正则表达式

2.findall(两种调用方法,下面同)

说明:在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。

re.findall(pattern,string)  
#pattern 指的是正则表达式,
string代表的是待匹配的字符串,
返回值:一个列表
obj.findall(string,pos,endpos) 
 #obj是生成的正则表达式对象,
 string代表的是待匹配的字符串,
 pos是开始位置,
 endos是结束位置

注意:如果正则表达式有子组,那么只显示子组的内容

示例:

import re 
obj=re.compile('\d')
print(obj.findall('1234m',0,3)

3.split

功能:按照正则表达式目标切割字符串
语法格式:

re.split(pattern, string[, maxsplit=0, flags=0])
#参数:
pattern	匹配的正则表达式
string	要匹配的字符串。
maxsplit	分隔次数,maxsplit=1 分隔一次,默认为 0,不限制次数。
flags	标志位,用于控制正则表达式的匹配方式,

4.sub

功能:替换正则表达式内容
语法格式:

re.sub(pattern,replaceStr,string)
obj.sub(replaceStr,string,max)
#参数
replaceStr :要替换的内容
string :目标字符串
max :最多替换几处
# 返回值:返回替换后的字符串

5.subn

和上面的 sub基本一样,只是是返回值不同
#返回值:返回替换后的字符串和实际替换的个数
下面的这几个函数返回的对象是 match 对象

6.finditer

功能:使用正则表达式匹配目标内容
语法格式:

obj.finder(string)#返回一个可迭代对象

示例:

import re
it = re.finditer('\d',"2345is a number")
for i in it:
    print(i.group())

7.match

(1)

返回值:如果匹配返回 match obj,否则返回None
注意:match匹配的话匹配对象必须在字符串的头部,如果头部没有匹配到,就会返回None

import re 
a=re.match('foo','foo in food')
print(a.group())#返回foo 

(2)match对象属性方法

属性:
re                       #匹配的正则表达式
start                    #匹配到的部分的开始
end                      #匹配到的部分的结束
string                   #目标字符串
pos                      #目标字符串开始位置
endpos                   #目标字符串结束位置,是字符串的长度,而不是索引下标
lastgroup                #最后一组的名字
lastindex                #最后一组是第几组

方法:
group(n)              #获取match对象匹配的内容,参数n默认为零,表示获取正则表达式整体匹配内容,如果传入大于零的数,则表示获取对应子组匹配内容

groupdict()           #得到所有捕获组的匹配内容,以字典形式返回
groups()              #匹配所有子组,得到所有子组匹配的内容


start()                 #匹配内容的开始位置  0
end()                 #匹配内容的结束位置  
span()               #匹配字符串的开始和结束位置,以一个元组返回

8.search

功能:匹配字符串
返回值:如果匹配返回 match obj,否则返回None
注意:search可以匹配任意位置,但好似只能匹配一

9.fullmatch

基本同match,要求完全匹配

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值