python正则表达式
python正则表达式
一、元字符
. 匹配任意字符(不包括换行符)
^ 匹配开始位置,多行模式下匹配每一行开始
$ 匹配结果位置,多行模式下匹配每一行结尾
* 匹配前一个元字符0到多次
+ 匹配前一个元字符1到多次
? 匹配前一个元字符0到1次
{m,n} 匹配前一个元字符m到n此
| 或,匹配|左右表达式任意一个
[] 字符集,对应位置可以是字符集中的任意一个
() 分组,从左到右每遇到一个编号+1
\d 匹配数字
\D 匹配非数字
\w 匹配字母和数字
\W 匹配非英文字母和数字
\s 匹配空白字符
特殊分组:原本分组只是从左到右编号+1,特殊分组可对分组添加别名
(?P<name>) 未分组添加别名name
(?P=name) 在使用分组别名对分组进行匹配
二、模式
1、忽略大小写 I
1 a = 'Hello Python' 2 regex = re.compile('hello world',re.I) 3 regex.match(a)
2、多行模式 M
1 a = ''' sfasdf 2 ghdfg 3 sgsdfg''' 4 regex = re.compile('^ s',re.M) 5 regex.match(a).group()
三、re内置函数
1、compile(pattern,flags=0)
pattern:用来匹配的字符串
flags:定义匹配使用的模式。如re.I忽略大小写
作用:编译正则表达式模式,返回一个对象模式(常用的表达式使用其编译后可提高效率)。
2、match(parttern,string,flags=0)
string:被匹配的字符串
作用:从被匹配的字符串左边第一位开始匹配,匹配成功返回match object对象,匹配失败则返回None
注:该方法并非完全匹配,要想实现完全匹配的效果可在用来匹配的字符串后加’$’
1 import re 2 a = 'Hello world' 3 re.match(r'hello',a,re.I) #Hello
3、search(parttern,string,flags=0)
作用:在string进行查找相匹配的字符串,匹配成功返回match object对象,匹配失败返回None
注:1.该函数要实现match函数的功能可在匹配字符串前加’^’
2.该函数要实现完全匹配可在字符串前后分别加’^’,’$’
1 import re 2 a = 'hello world' 3 re.search(r'^ello world$',a)
注:对match object提供的方法(得到匹配成功返回的数据)
1、group() :返回被匹配的字符串,可通过输入组号输出对应的内容
2、groups():以元组形式返回匹配到的所有内容
2、start() :返回匹配开始的位置
3、end() :返回匹配结束的位置
4、span() :返回一个元组(匹配开始、结束的位置)
4、findall(pattern,string,flags=0)
作用:遍历匹配,以列表的形式返回所有能够被匹配的字符串
1 import re 2 a = 'python2 Python3' 3 regex = re.compile(r'\d') 4 regex.findall(a) #['2','3']
5、finditer(parttern,string,flags=0)
作用:作用与findall相同,但返回的为迭代器
6、split(pattern,string[,maxsplit])
maxsplit:最大分割数,不指定将全部分割
作用:在string中匹配与pattern相同的字符,对string进行分割
7、sub(pattern,repl,string,count)
repl:需要替换的字符串
count:替换个数,默认为0,即每个都替换
作用:使用repl替换在string中匹配到pattern的字符,并返回被替换后的字符串
1 import re 2 a = 'hello world' 3 re.sub(r'w\D+','python',a) #hello python
8.subn(pattern,repl,string,count=0,flags=0)
作用:作用与sub类似,会返回一个元组,即替换后的字符串及替换的次数。