摘自廖雪峰老师的博客
正则表达式中各字符代表含义
.:任意字符
*:任意个字符
+:至少一个字符
?:0或1个字符
{n}:n个字符
{n, m}:n~m个字符
\d:匹配一个数字
\w:匹配一个数字或字母
\s:匹配一个空格
^:表示行的开头,^\d表示以整数开头
$:表示行的结束,\d¥表示以整数结尾
正则表达式的作用
1.匹配字符串。如:用户输入了一组标签,可以用正则表达式判断是否与正确的输入匹配,也可以把不规范的输入转化成正确的数组。
import re
print re.match(r'^\d{3}\-\d{3,8}$', '010-12345') # 匹配成功,返回一个match对象
print re.match(r'^\d{3}\-\d{3,8}$', '010 12345') # 匹配失败,返回None
结果:
<_sre.SRE_Match object at 0x00000000025B2578>
None
2.分组
import re
m = re.match(r'^(\d{3})-(\d{3,8})$', '010-12345')
print m.group(0) # group(0)是原始字符串
print m.group(1) # group(1)是第一个子串
print m.group(2) # group(1)是第一个子串
print m.groups() # groups是所有子串
结果:
010-12345
010
12345
('010', '12345')
3.切分字符串
>>> 'a b c'.split(' ') # b和c之间3个空格
['a', 'b', '', '', 'c'] # 结果表明:无法识别连续空格
>>> re.split(r'[\s\,\;]+', 'a,b;; c d')
['a', 'b', 'c', 'd'] # 结果表明:一个或多个的空格、逗号、分号都能识别
贪婪匹配
正则匹配默认是贪婪匹配(尽可能多地匹配字符),加个?变为非贪婪匹配。