python 正则表达式

来源:互联网 发布:netstat查看端口占用 编辑:程序博客网 时间:2024/04/25 09:48

正则表达式匹配规则

\d:一个数字
\w:一个字母或数字
.:匹配一个任意字符
*:匹配任意个字符(包括0个)
+:匹配至少一个字符
?:表示0个或1个字符
{n}:表示n个字符
{n,m}:表示n-m个字符
[]:表示精确匹配
A|B:表示匹配A或者B
^:表示行的开头,^\d表示必须以数字开头
$:表示行的结束,/d$表示必须以数字结束

切分字符串

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

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

分组

除了简单地判断是否匹配之外,正则表达式还有提取子串的强大功能。用()表示就是要提取的分组。比如:^(\d{3})-(\d{3,8})$分别定义了两个组,可以直接从匹配的字符串中提取出区别和本地号码:

>>> m = re.match(r'^(\d{3})-(\d{3,8})$', '010-12345')>>> m<_sre.SRE_Match object; span=(0, 9), match='010-12345'>>>> m.group(0)'010-12345'>>> m.group(1)'010'>>> m.group(2)'12345'

贪婪匹配

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

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

由于\d+采用贪婪匹配,直接把后面的0全部匹配了,结果0*只能匹配空字符串了。

必须让\d+采用非贪婪匹配(也就是尽可能少匹配),才能把后面的0匹配出来,加个?就可以让\d+采用非贪婪匹配:

>>> re.match(r'^(\d+?)(0*)$', '102300').groups()('1023', '00')

编译

当我们在Python中使用正则表达式时,re模块内部会干两件事情:
1、编译正则表达式,如果正则表达式的字符串本身不合法,会报错;
2、用编译后的正则表达式去匹配字符串。
预编译

>>> import re# 编译:>>> re_telephone = re.compile(r'^(\d{3})-(\d{3,8})$')# 使用:>>> re_telephone.match('010-12345').groups()('010', '12345')>>> re_telephone.match('010-8086').groups()('010', '8086')

编译后生成Regular Expression对象,由于该对象自己包含了正则表达式,所以调用对应的方法时不用给出正则字符串。

0 0
原创粉丝点击