python 正则表达式

来源:互联网 发布:mac outlook windows 编辑:程序博客网 时间:2024/06/05 07:27

python 正则表达式

功能:用来匹配字符串,正则表达式也是由字符组成。
在进行数据处理时非常有用

'\d'可以匹配数字,'\w'可以匹配字母或者数字'\s'匹配一个空格eg:'00\d'可以匹配'007'    '\d\d\d'可以匹配'010'    '\w\w\d'可以匹配'py3''.'可以匹配任意字符eg: 'py.'可以匹配'pyc','pyo','py!''*'可以匹配任意个字符'+'匹配至少一个字符'?'匹配0个或1个字符'{n}'表示n个字符'{n,m}'表示n-m个字符eg:'\d{3}\s+\d{3,8}'    '\d{3}':匹配三个数字    '\s+'匹配至少一个空格    '\d{3,8}':匹配38个数字

若有特殊字符如’-‘需要用’-‘进行转义

若要更精确的匹配,可以用[]表示范围

'[0-9a-zA-Z\_]' 匹配一个数字,字母或者下划线'[0-9a-zA-Z\_]+' 匹配至少有一个数字,字母或者下划线组成的字符'[a-zA-Z\_][0-9a-zA-Z\_]*' 匹配由字母或者下划线开头,任意接一个数字,字母或下划线组成的字符串(python的合法变量)'[a-zA-Z\_][0-9a-zA-Z\_]{0,19}' 增加了变量长度的限制'A|B' 匹配A或Beg: '(P|p)ython'可以匹配'python'或'Python''^'表示行的开头 '^\d'必须以数字开头'$'表示行的结束 '\d$'必须以数字结束 eg: '^py$'只能匹配'py'

re模块
python中的re模块提供所有正则表达式的功能,由于python本身也用’\’进行转义,所以可以使用python的r前缀,就不用考虑转义
eg:’ABC\-001’对应的转义字符串是’ABC-001’
r’ABC-001’对应转义字符串仍是’ABC-001’

import rere.match(r'^\d{3}\-\d{3,8}$','010-12345')#如果匹配成功,返回match对象,否则返回Nonetest='用户输入的字符串'if re.match(r'正则表达式',test):    print('ok')elif:    print('failed')

利用正则表达式,切分字符串

#正常情况是按空格切分,但是无法识别多个空格>>> 'a b   c'.split(' ')['a', 'b', '', '', 'c']>>> re.split(r'\s','a b    c')['a', 'b', '', '', '', 'c']#利用正则表达式可以识别多个空格>>> re.split(r'\s+','a b   c')['a', 'b', 'c']#可以通过','或者';'与' '同时进行分割>>> re.split(r'[\s\,\;]+','a,b;c   d')['a', 'b', 'c', 'd']

提取字串
利用’()’表示需要提取的分组group
eg: 从电话号码中分别提取区号和本地号码

m=re.match(r'^(\d{3})-(\d{3,8})$','010-12345')>>> m.group(0)#group(0)表示原字符'010-12345'>>> m.group(1)#第一组()'010'>>> m.group(2)#第二组()'12345'>>> m=re.match(r'.{2,5}(\d.\d)"$','´óÆÁ5.5"')#提取5.5>>> m.group(1)'5.5'>>> m=re.match(r'.{2,5}(\d.\d+)"{1,3}$','"中屏5.15"""')>>> m.group(1)'5.15'

贪婪匹配
正则表示法尽可能多的匹配字符,例如果要匹配出数字后面的’0’
re.match(r'^(\d+)(0*)$','102300').group()
由于’\d+’采用贪婪匹配,后面的0全部匹配了,’0*’只能匹配空

re.match(r'^(\d+?)(0*)$','102300').group()
\d+?’尽量少的匹配,可以把后面的0匹配出来

编译:
如果一个正则表达式要使用几千次,出于效率考虑,应该预编译表达式

import re#预编译re_telephone = re.compile(r'(\d{3})-(\d{3,8})$')#使用re_telephone.match('010-12344').group(1)#有了预编译,对应调用时就不用写正则表达式了。

参考:廖雪峰python教程