Python正则表达式

手机号码的正则

PHONE_NUM_RE = re.compile(r'^0\d{2,3}\d{7,8}$|^1[34578]\d{9}$|^147\d{8}', re.IGNORECASE)
re.match(PHONE_NUM_RE, mobile)

正则表达式
用正则表达式要引入re模块 import re
元字符
. ^ $ * + ? {} [] \ | ()
[ ]
常用来指定一个字符集:[abc] ; [a-z];[a-zA-Z0-9]
取不在区间范围的字符:[^abc]

import re  
s = r't[oi]p'  
print re.findall(s,'top tip tjp') 

输出: [‘top’, ‘tip’]

import re  
s = r't[^oi]p'  
print re.findall(s,'top tip tjp')  

输出:[‘tjp’]

^ 表示从行首开头的一个,元字符内^不起作用,如[ ]中^表示不是这些字符

import re  
s = r'^hello'  
print re.findall(s,'hello  aa hello')  

输出[‘hello’]

import re  
s = r'^hello'  
print re.findall(s,'aa hello')  

输出[]

$表示行尾

import re  
s = r'hello$'  
print re.findall(s,'aa hello')  

输出:[‘hello’]

\ 斜杠
斜杠后面可以加不同的字符表示不同的特殊意义
也可以用于取消所有的元字符:[ 或 \

\d 匹配任何十进制数:它相当于[0-9]
\D 匹配任何非数字字符:它相当于[^0-9]
\s 匹配任何空白字符:它相当于[\t\n\r\f\v]
\S 匹配任何非空白字符:它相当于[^\t\n\r\f\v]
\w 匹配任何字母数字字符:它相当于[a-zA-Z0-9_]
\W 匹配任何非字母数字字符:它相当于[^a-zA-Z0-9_]

重复
a{n} 将前面的a重复n次
a{m,n} a最少重复m次最多重复n次
m不写为0 ,n不写相当于*
{0,}等同于*
{1,}等同于 +
{0,1}等同于?
例如:取电话号码

import re  
s = r'^0571-\d{1,8}'#把\d 重复8次
print re.findall(s,'0571-67777777')    

*将前面的字符匹配0次到多次

import re  
s = r'^0571-2*'  
print re.findall(s,'0571-22222222')  

输出[‘0571-22222222’]

+将前面的字符重复1次到多次

?将前面的字符重复0次到多次

贪婪模式跟非贪婪模式

import re  
r=r'ab+'  
print re.findall(r,'abbbbbbbbbb')  

输出:[‘abbbbbbbbbb’]

贪婪模式匹配最多的

import re  
r=r'ab+?'  
print re.findall(r,'abbbbbbbbbb')  

输出:[‘ab’]
非贪婪模式匹配最少的,就是在后面加?

正则常用函数

re.compile() 编译正则,加快速度
compile(pattern, flags=0)

import re  
r=r'\d{3,4}-?\d{8}'  
p_tel = re.compile(r)  

print re.findall(p_tel,'0571-67777777')  
print  p_tel.findall('0571-61111111')  

flags可以给编译加些属性,如不区分大小写

import re  
r=r'abcde'  
p = re.compile(r,re.I)  

print  p.findall('aBCdE')  

会输出:[‘aBCdE’]

math() 决定re是否在字符串开始位置匹配 返回match对象
match对象中的方法:
group() 返回re匹配的字符串
start() 返回匹配开始的位置
end() 返回匹配结束的位置
span() 返回一个元组包含匹配开始,结束的位置
search() 扫描字符串,找到re匹配的位置,返回match对象
findall() 找到re匹配的所有字串,并把它们作为一个列表返回
finditer() 找到re匹配的所有字串,并把它们作为一个迭代器返回
sub() subn()替换

import re  
r=r'a...e'  

print  re.sub(r,'12345','abcde')  

输出:12345

split() 切割

import re  
s='123+456-789'  
print  re.split(r'[\+\-]',s)    

输出:[‘123’, ‘456’, ‘789’]

分组
(a|b)

import re  
email = r'\w+@\w+(\.com|\.cn)'  
print  re.search(email,'billvsme@163.com').group()  

输出:billvsme@163.com

import re  
email = r'\w+@\w+(\.com|\.cn)'  
print  re.findall(email,'billvsme@163.com')  

这样只会输出分组内地内容 :[‘.com’] ,在爬虫中这样很有用

转载来源

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值