1、
python re模块函数:
re.compile() : 将字符串编译为Pattern对象
re.match():从0位置匹配
re.search():搜索任意位置,相同字符串只是返回一个
re.findall(): 搜索任意位置,返回所有搜到的相同的字符串
2、
(1)匹配固定字符: ‘a\dc’ 可以匹配 ‘a2c’; ‘a\wc’ 可以匹配 ‘abc’
(2)匹配变长字符:
例如:\d{3}\s+\d{3,8}
\d{3} 表示3个数字
\s+表示至少有一个空格
\d{3,8}表示3~8个数字
即可匹配:010 12345678
\d{3}-\d{3,8} :即可匹配:010-12345678
可以用[ ]表示范围,比如:
[0-9a-zA-Z_]可以匹配一个数字、字母或者下划线;
A|B可以匹配A或B,所以(P|p)ython可以匹配’Python’或者’python’。
^表示行的开头,^\d表示必须以数字开头。
$表示行的结束,\d$表示必须以数字结束。
py也可以匹配’python’,但是加上^py$就变成了整行匹配,就只能匹配’py’。
3、
在Python的字符串前面加上‘r’,编译器 不会将\n 认为是换行。而是两个字符,\和n, 而不会转意为换行符。由于正则表达式和python中的 \ 会有冲突,因此,当一个字符串使用了正则表达式后,最好在前面加上’r’。
例如:
import re
test=’010-12345’
if re.match(r’^\d{3}-\d{3,8}$’,test):
print ‘ok’
else:
print ‘faild’
#ok
4、 切分字符 re.split(r’[\s,\;]+’,’a, ;b c d’) #[‘a’, ‘b’, ‘c’, ‘d’]
5、分组():
m=re.match(r'^(\d{3})(-)(\d{3,8})$','010-12345678')
print m.group(0)
print m.group(1)
print m.group(2)
print m.group(3)
\#输出
010-12345678
010
\-
12345678
6、贪婪匹配:
\>>> re.match(r'^(\d+)(0*)$', '102300').groups()
('102300', '') #0匹配不到字符
\>>> re.match(r'^(\d+?)(0*)$', '102300').groups()
('1023', '00') #对\d+进行非贪婪匹配。(在\d+后加一个?号)
7、编译:
当我们在Python中使用正则表达式时,re模块内部会干两件事情:
(1)编译正则表达式,如果正则表达式的字符串本身不合法,会报错;
(2)用编译后的正则表达式去匹配字符串。
如果一个正则表达式要重复使用几千次,我们可以预编译该正则表达式,接下来重复使用时就不需要编译这个步骤了,直接匹配。
import re
cp=re.compile(r'^(\d{3})-(\d{3,8})$')
print re.match(cp,'010-12345')
print re.match(cp,'010-12')
#<_sre.SRE_Match object at 0x0000000002336360>
#None
7、查找邮箱:
import re
test='674033623@qq.com'
cp=re.compile(r'(^\d{5,11})(@)([0-9a-zA-Z]+)(\.)([a-zA-Z]+)$')
print re.match(cp,test)
print re.match(cp,test).groups()
#<_sre.SRE_Match object at 0x000000000234D480>
#('674033623', '@', 'qq', '.', 'com')