Python:正则表达式

来源:互联网 发布:linux安装vncviewer 编辑:程序博客网 时间:2024/05/16 16:10

正则表达式中:
①直接给出字符,精确匹配
\d 匹配一个数字
\w 匹配一个字母或数字
_ ._ 可以匹配任意字符
如: ‘\d\d\d’可匹配 ‘110’
‘\w\w\d’可匹配 ‘py2’
‘\py.’ 可匹配 ‘pyc’ ‘py1’ 等
②匹配变长的字符
* 任意个字符(包括0个)
+ 表示至少一个字符
? 表示0个或1个字符
{n} 表示n个字符
{n,m} 表示n到m个字符
例:
\d{3}\s+\d{3,8}
1、\d{3} 表示匹配三个数字,例如 ‘110’
2、\s 可以匹配一个空格(也包括Tab等空白符),\s+ 表示至少有一个空格,例如匹配 ’ ‘,’ ’
3、\d{3,8} 表示3到8个数字 例如 ‘1234567’
进阶
要做更精确的匹配,可用[] 表示范围:
· [0-9a-zA-Z_] 可以匹配一个数字、字母或者下划线;
· [0-9a-zA-Z_]+ 可以匹配至少由一个数字,字母或者下划线组成的字符串,比如 ‘a000’,’py_’等
· [a-zA-Z_][0-9a-zA-Z_]* 可以匹配字母或下划线开头,后接任意个由一个数字、字母或者下划线组成的字符串,也就是python的合法变量
· [a-zA-Z_][0-9a-zA-Z_]{0,19} 更精确的限制了变量长度是1-20个字符(前面1个字符+后面最多19个字符)
A|B 可以匹配A或B,所以(P|p)ython可以匹配’Python’ 或 ‘python’
^ 表示行的开头 ^\d 表示必须以数字开头
$ 表示行的结束 放在最末尾表示必须以……..结束
注意:类似 ‘py’ 可以匹配‘python’但加上 ^py$ 就变成了整行匹配,就只能匹配’py’了

\A^在默认情况下意义相同,表示输入字符串的开始位置
\B$ 在默认情况下意义相同,表示输入字符串的结束位置

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

re模块
使用正则表达式,首先导入python提供的re模块

impot re

判断匹配时,使用Python的 r 前缀

s=r'123\_aaa'

用match方法判断是否匹配成功,成功则返回一个match对象,否则返回None,常见的判断方法是:

test='输入的字符串'if re.match(r'正则表达式',test):    print 'ok'else:    print 'failed'

切分字符串
使用 split()函数,语法:split(r’正则表达式’,’字符串’)
正则表达式中是切分字符串的分段点,函数返回一个list

import reprint re.split(r'[\s\,]+','a,b, ,c,  , d')['a', 'b', 'c', 'd']

分组
使用 group()函数分组,即是提取子串。用() 表示要提取的分组

test='010-1234567'if re.match(r'\d{3}\-\d{3,8}$',test):    print 'ok'else:    print 'no'm=re.match(r'^(\d{3})\-(\d{3,8})',test)print m.group(0)print m.group(1)print m.group(2)

注意:group(0) 永远是原始字符串,group(1)、group(2)….分别表示按括号顺序表示的子串。
贪婪匹配
正则表达式默认是贪婪匹配,也就是匹配尽可能多的字符。
例如:

print re.match(r'^(\d+)(0*)$','10023000').groups()('10023000', '')

可见\d+采用贪婪匹配,直接把后面的0全部匹配了,结果0*只能匹配空字符串
让\d+采用非贪婪匹配,才能把后面的0匹配出来,在其后加?可让\d+采非贪婪匹配

print re.match(r'^(\d+?)(0*)$','10023000').groups()('10023', '000')

编译
如果需要重复的使用某个正则表达式,那么你可以先将该正则表达式编译成模式对象。
我们使用re.compile()方法编译。
以下为编译标志:
这里写图片描述
这里写图片描述
这里写图片描述

原创粉丝点击