Regular expression in Python3 Link to heading
credit from 廖雪峰的官网
- 常见表达
\d — 用来匹配数字(digit)
\w — 用来匹配字母或数字(Word)
\s — 用来匹配空格(space)
. — 用来匹配任意字符
* — 匹配>=0个字符
+ — 匹配>0个字符
? — 匹配0或1个字符
{n, m} — 表示 n-m 个字符, 通常和\d,\w,\s搭配着用
[] — 表示范围. eg: [a-zA-Z\_][0-9a-zA-Z\_]*可以匹配由字母或下划线开头,后接任意个由一个数字、字母或者下划线组成的字符串,也就是Python合法的变量;
A|B — 可以匹配A或B
^ — 表示行的开头
$ — 表示行的结束
re 模块
- 使用
r前缀, 不考虑转译的问题. eg:
s = r'ABC\-001' # Python的字符串 # 对应的正则表达式字符串不变: # 'ABC\-001'使用
match()来判断是否匹配成功, 成功则返回一个 Match 对象, 否则, 返回None切分字符串用
split(). 除了切分, 还可以用()表示要提取的分组 eg:
>>> m = re.match(r'^(\d{3})-(\d{3,8})$', '010-12345') >>> m.group(0) '010-12345' >>> m.group(1) >>> m.group(2)group(0)永远是原始字符串- python 默认正则匹配是贪婪匹配, 如果想要取消贪婪匹配, 需要在后面加
?
eg:
>>> re.match(r'^(\d+)(0*)$', '102300').groups() ('102300', '') >>> re.match(r'^(\d+?)(0*)$', '102300').groups() ('1023', '00')- python 在使用正则表达式的时候, re 模块会做两件事, 1. compile 正则表达式; 2. match 字符串
所以在一个正则表达式要重复使用几千次的时候, 先 compile 就可以提升效率
re_prime = re.complie(r'^$')- 使用