python 正则表达式

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或B
eg: '(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 re
re.match(r'^\d{3}\-\d{3,8}$','010-12345')
#如果匹配成功,返回match对象,否则返回None

test='用户输入的字符串'
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教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值