正则表达式、re函数

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')
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值