Python正则表达式笔记

注:整理自 www.liaoxuefeng.com

##re模块
###导入re模块

1
import re

###match()方法

1
re.match()

match()方法匹配成功返回一个Match对象,否则返回None。
常见使用方法:

1
2
3
4
5
str = 'xxxxx'    #待处理字符串
if re.match(r'RegExp', str): #r表示字符串内不使用转义
pass #匹配成功
else:
pass #匹配失败

###split()方法
用于正则表达式切分字符串。
用法:

1
re.split(r'RegExp', str)

返回切分好的list。

###分组与group()方法
在正则表达式中使用()来分组,如果分了组,就可以对Match对象用group()方法来提取组员。
eg:

1
2
3
4
m = re.match(r'^(\d{3})-(\d{3,8})$', '010-12345')
m.group(0) #返回'010-12345',即原字符串
m.group(1) #返回'010',即第一个匹配组
m.group(2) #返回'12345',即第二个匹配组

※此外还有groups()方法,对Match对象使用,返回一个每组按顺序组成的tuple,不包含原字符串。

###预编译和compile()方法
使用预编译可以提高大量使用RegExp时的效率。
eg:

1
2
3
4
import re
re_telNumber = re.compile(r'^(\d{3})-(\d{3,8})$') #将RegExp匹配样式预编译,以便之后直接使用
re_telNumber.match('010-12345').groups() #直接匹配,match()方法的参数只有待处理字符串
#返回('010', '12345')

##匹配语法
###精确匹配

  • \d
    匹配一个数字

  • \w
    匹配一个字母或数字

  • .
    匹配任意一个字符

###匹配变长字符
作为匹配表达式后缀:

  • {n}
    匹配n个数字

  • {m, n}
    匹配m至n个字符

  • *
    匹配任意个数字符

  • +
    匹配至少一个字符

  • ?
    匹配0个或1个字符

###进阶

  • []
    匹配范围
    eg:[0-9a-zA-z\_] 匹配一个数字or字母or下划线

  • a|b
    匹配a或者b
    eg:(p|P)ython 匹配python或者Python

  • ^
    匹配开头
    eg:^\d 匹配以一个数字开头

  • $
    匹配结尾
    eg:\d$ 匹配以一个数字结尾

※^和$一般成对使用,能更规范地进行匹配。