Python -- 正则表达式 regular expression

正则表达式(regular expression)

      作用:用来匹配字符串。  

      设计思想:用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,就认为它“匹配”了,否则,该字符串就是不合法的。

      格式:正则表达式也是用字符串表示的,注意:带引号

re.split(pattern=,string)  #切分字符串
re.match(pattern,string)   #匹配
re.compile(pattern=).match(string)  #先编译,再匹配
re.match().groups()  #返回子串元组格式,注意这里是groups,加了s,下面的没有加s
re.match().group(0)   #返回原字符串
re.match().group(1)   #返回第1个子串
re.match().group(2)   #返回第2个子串
#贪婪匹配问题:加个?即可

regular expression,re模块

防 止 转 义:使用Python的r前缀,就不用考虑转义的问题

匹          配:re.match(pattern, string) :判断是否匹配,匹配成功返回一个match对象;否则返回                        None。

切分字符串re.split(格式,字符串 )方法

贪 婪 匹 配正则表达式默认是贪婪匹配,也就是匹配尽可能多的字符。

分          组:正则表达式还能提取子串,格式:用()表示的就是要提取的分组 group

替          换:re.sub(原来的内容,替换后的,需要替换的字符串)  re.sub("d","-","chuan1zhi2") 表示把这个字符串里的数字替换为-

预编译 

   在Python中使用正则表达式时,re模块内部会做两件事情:

 1、编译正则表达式,如果正则表达式的字符串不合法,就会报错;

 2、用编译后的正则表达式去匹配字符串。

re.compile(pattern=).match(string).groups()

例子:

1,https://www.bilibili.com/video/BV1Lx411d7Cj?p=24 , 13:21秒讲的例子很好

re模块中常用方法:

#下面的string是指被替换的原始字符串

re.match(  )

re.search(pattern, string , flags=0 )   #在全文中匹配一次,匹配到就返回

re.findall(pattern, string, start, end)  #在整个字符串中搜索所有符合正则表达式的字符串,匹配所有返回一个列表

re.sub(pattern1, pattern2, string,  count, flags  )  # 将模式pattern1替换为pattern2

re.subn(pattern1, pattern2, string )  #实现目标的搜索和替换,同时还会以元组形式返回被替换的次数

re.split(pattern, string )    #分割字符串,结果以列表List形式返回

 re.match方法使用标志位flags的情况:

flags可选标志位:  如果同时使用多个标志位,使用“ | ”分割。比如re.I | re.M

修饰符 描述 备注
re.I 使匹配对大小写不敏感  
re.S 使.匹配包括换行在内的所有字符  
re.L 做本地化识别(local-aware)匹配  
re.M 多行匹配,影响^和$  
re.U 根据Unicode字符集解析字符。这个标志影响w, W, , B  
     

格式 作用 备注
d 匹配一个数字 [0-9]  digit
D 匹配非数字  
w 匹配单词字符,即a-z,A-Z,0-9,_ word 
W 匹配非单词字符  
s 匹配一个空格, , , , f, v,空白,Tab键  space
S 匹配非空白,除空格、tab键之类的  
. 匹配任意字符,但不包含换行符' ';但是在DOTALL模式中可以匹配换行符。

 'py.'可以匹配'pyc', 'pyo', 'py!'

re.findall("."," ",re.DOTALL) 或re.findall("."," ",re.S),re.DOTALL可以简写为re.S

* 匹配前一个字符0个到任意个  
+ 匹配前一个字符1个到任意个  
匹配前一个字符0个到1个  
{n} 匹配前一个字符n次  
{n,} 匹配前一个字符至少n次  
{n,m}, {min, max} 匹配前一个字符n到m次,n个,n+1个……m个 n=<字符个数<=m
[0-9a-zA-Z\_] 匹配一个字符,限定范围中的任意类型都可以 字符个数=1,并不是匹配每种类型一个;不能为0个,空字符串会报错
[0-9a-zA-Z\_]+ 至少有一个字符,限定范围中的任意类型都可以 字符个数>=1
[0-9a-zA-Z\_]* 任意个字符(包含0个),限定范围中的任意类型都可以 字符个数>=0,只是比+表示的字符多了一个0
[0-9a-zA-Z\_]? 0个或1个字符,限定范围中的任意类型都可以 字符个数=0个,1个
[a-zA-Z\_][0-9a-zA-Z\_]* 匹配由字母或下划线开头,后接任意个字符,限定范围中的任意类型都可以  
[a-zA-Z\_][0-9a-zA-Z\_]{0,19} 更精确地限制了变量的长度,前半部分只匹配一个字符,{0,19}是限定后半部分字符的长度 所以总的字符长度是1+{0,19}={1,20}
^ 表示行的开头 ^d,表示必须以数字开头
$ 表示行的结束 d$,表示必须以数字结尾
A|B 可以匹配A或B (P|p)ython可以匹配'Python' 或'python'
re模块的match方法 匹配字符串  
re模块的split方法 切分字符串  
re模块的group方法,groups方法 返回匹配结果,group返回原字符串,groups返回子串元组  
原文地址:https://www.cnblogs.com/bravesunforever/p/10520269.html