html页面解析类:re模块解析

re模块可以进行替换、匹配、分割等操作

 #re模块 正则表达式:匹配 检索 替换 分割用
import sys,os,re


#####查询  search()  match() findall()  finditem()######
res=re.search("[0-9]",'abscd23')  #在后面的字符串查找数字  这里是用的re模块的函数
print(res) #<re.Match object; span=(5, 6), match='2'>
print(res.group())  #2  用group方法取值

res=re.compile('[0-9]')  #res返回的是一个对象
a=res.search("absdf2")  #用对象里面的方法查找
print(a)  #<re.Match object; span=(5, 6), match='2'>

res=re.match("[0-9]{2}",'abscd23')
print(res) #None
res=re.search("[0-9]{2}",'abscd23')
print(res)  #<re.Match object; span=(5, 7), match='23'>
res=re.match("[0-9]{2}",'23dfji')
print(res) #<re.Match object; span=(0, 2), match='23'>
#search 合match方法,match只检索开头匹配的,search检索全部字符进行匹配
# 通用字符:[0-9]  == \d   ;[^0-9] ==\D  ;\s  == 空白符查找,如空格换行;\S ==非空白字符;\w ==字母数字下划线 [A_Za-z0-9_];\W 非数字字母下划线
# 元字符:[] ,^,*,+,?(可有可无),{n}(匹配n次出现),{n,m}(最少n次最多m次),\,$,()(这里的小括号为整体原子的意思,有小括号时就只配括号里面的内容),|(或),.(任意一个除换行符的字符)
#re.I 忽略大小写  re.S  表示输出换行符

a=re.findall('[0-9]{3}','ji123kkkds2321')
print(a) #['123', '232']
a=re.findall('[0-9]{1,}','ji123kkkds2321')  #出现一位以上
print(a) #['123', '2321']
a=re.findall('[a-z]{3,}','ji123kkSds23UIEls21',re.I)  #先忽略字符串的大小写然后进行查找
print(a) #['kkSds', 'UIEls']
a=re.findall('.+','ji123kkSd\ns23UIEls21',re.S)  #先忽略字符串的大小写然后进行查找
print(a) #['ji123kkSd\ns23UIEls21']
a=re.findall('.+','ji123kkSd\ns23UIEls21')
print(a) #['ji123kkSd', 's23UIEls21']
a=re.findall('.*?','ji123kkSds23UIEls21')   #贪婪模式  .*?主要用在两端有数据的时候
print(a) #[]
a=re.findall('<b>(.*?)</b>','<b>aacc<li>link</li><b>isf</b></b>')
print(a) #['aacc<li>link</li><b>isf']
a=re.findall('<b>(.*?)</b>','<b>aacc</b><li>link</li><b>isf</b>')  #'<b>(.*?)</b>' =='<b>(?:.*?)</b>'
print(a) #['aacc', 'isf']
a=re.findall('<b>.*?</b>','<b>aacc</b><li>link</li><b>isf</b>')
print(a) #['<b>aacc</b>', '<b>isf</b>']

str="<ul><li>a</li><li>b</li><li>c</li> </ul>"
a=re.findall('<li>(.*?)</li>',str)
print(a)  #['a', 'b', 'c']
for v in a:
    print(v)
a=re.findall('<li>.*?</li>',str)
print(a) #['<li>a</li>', '<li>b</li>', '<li>c</li>']
for v in a:
    print(v)


######拆分  split()#######
str="123,3443;234.42;34,22348"
print(str.split('[^0-9]'))
#['123,3443;234.42;34,22348']  这里的拆分正则不生效
print(str.split(',')) #['123', '3443;234.42;34', '22348']

res=re.split('[^0-9]',str)  #正则生效
print(res) #['123', '3443', '234', '42', '34', '22348']
res=re.split('[^0-9]',str,4)  #正则生效,这里是4表示拆分到第4个满足条件的地方时结束
print(res) #['123', '3443', '234', '42', '34,22348']


#####替换 sub() subn()#####
str="123,3443;234.42;34,22348"
res=re.sub('[^0-9]',' ',str)  #将str的非数字替换为空格
print(res) #123 3443 234 42 34 22348
res=re.subn('[^0-9]',' ',str)  #返回的是元组
print(res)  #('123 3443 234 42 34 22348', 5)  5表示共替换了5次

#数据库中也能用正则查询
#select * from tableA where regexp '^[a-z]{2}'  查询name列符合这个正则的行

特殊通用字符使用:

通用字符:
[0-9] == \d ;[^0-9] ==\D ;
\s == 空白符查找,如空格换行;
\S ==非空白字符;
\w ==字母数字下划线 [A_Za-z0-9_];
\W 非数字字母下划线

元字符:
[] ,^,*,+,?(可有可无),
{n}(匹配n次出现),
{n,m}(最少n次最多m次),,$,
()(这里的小括号为整体原子的意思,有小括号时就只配括号里面的内容),
|(或),
.(任意一个除换行符的字符)

#re.I 忽略大小写 re.S 表示输出换行符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值