匹配符
符号 |
含义 |
\d |
数字 |
\w |
字母或数字 |
\s |
空白符 |
. |
任意字符 |
{n} /{n,m} |
n个字符/n~m个字符 |
+ |
至少一个字符 |
* |
任意个字符 |
? |
0个或者1个字符 |
[] |
表示范围 |
^ |
开头 |
$ |
结尾 |
re模块
1 2
| re.match(r'正则表达式','输入字符串') re.splite(r'正则表达式','输入字符串')
|
分组
1 2 3 4 5 6 7 8 9
| >>> m = re.match(r'^(\d{3})-(\d{3,8})$','010-12345') >>> m <_sre.SRE_Match object at 0x10054fc68> >>> m.group(0) '010-12345' >>> m.group(1) '010' >>> m.group(2) '12345'
|
贪婪匹配
正则匹配默认是贪婪匹配,也就是说会匹配尽可能多的字符。
1 2 3 4 5 6
| >>> re.match(r'^(\d+)(0*)$','102300').groups() ('102300', '')
>>> re.match(r'^(\d+?)(0*)$','102300').groups() ('1023', '00')
|
预编译
在Python中使用正则表达式时,re模块内部会干两件事:
- 编译正则表达式,如果正则表达式的字符串本省不合法就会报错;
- 用编译后的正则表达式去匹配字符串。
如果一个正则表达式需要重复使用几千次,考虑效率,可以预编译正则表达式,接下来不需要再重复编译了,直接匹配:
1 2 3 4 5 6
| >>> import re >>> re_telephone = re.compile(r'^(\d{3})-(\d{3,8})$') >>> re_telephone.match('010-12345').groups() ('010', '12345') >>> re_telephone.match('010-80992').groups() ('010', '80992')
|
感谢网上恩师廖雪峰老师的Python教程,本文大部分内容都摘自于此。