python正则表达式(re使⽤)python正则表达式(re模块)
跟之前在js中所见到的正则表达式是类似的
⼀:re的常⽤操作符:
操作符说明实例
.表⽰单个字符
[ ]字符集,对单个字符给出取值范围[abc]表⽰abc [a-z]不爱告诉a到z单个字符
[ ^ ]⾮字符集,对单个字符给出排除范围[^abc]表⽰⾮a或⾮b或⾮c的单个字符
*前⼀个字符0次货⽆限次扩展abc*表⽰ab、abc、abcc、abccc
+前⼀个字符1次货⽆限次扩展abc+表⽰abc、abcc、abccc
前⼀个字符0次货1次扩展abc?表⽰ab、abc
|左右表达式任意⼀个abc|def表⽰abc、def
{m}扩展前⼀个字符m次ab{2}c表⽰abbc
{m,n}扩展前⼀个字符m到n次abP{1,2}表⽰abc、abbc
^匹配字符串开头^abc表⽰abc且在⼀个字符串的开头
$匹配字符串结尾abc$表⽰abc且在⼀个字符串的结尾
()分组标记,内部职能使⽤|操作符(abc)表⽰abc,(abc|def)表⽰abc、def
\d数字,等价于【0-9】
\w单词字符,等价于【A-Za-z0-9_】
⼆:re库的主要功能函数:
函数说明
re.search()在⼀个字符串中搜索匹配正则表达式的第⼀个位置,返回match对象
re.findall()搜索字符串,以列表类型返回全部能匹配的⼦串
re.match()从⼀个字符串的开始位置起匹配正则表达式,返回match对象
re.split()将⼀个字符串按照正则表达式匹配进⾏分割,返回列表类型
re.finditer()搜索字符串,返回⼀个匹配结果的迭代类型,每⼀个迭代元素是match对象
re.sub()在⼀个字符串中替换所有匹配正则表达式的⼦串,返回替换后的字符串
re库中包含的⼀些可选标志修饰符来控制匹配的模式
修饰描述
re.I是匹配对⼤⼩写不敏感
re.L做本地化识别(locale-aware)
re.M多⾏匹配,映像^和$
re.S使.匹配包括换⾏再被的所有字符
re.U根据Unicode字符集解析字符,这个标志映像\w,\W,\b,\B
re.X该标志通过给予更多灵活的格式以便将正则表达式写的更易于理解
三:re使⽤格式
import re
pat=repile("AA") #此处的AA,是正则表达式,⽤来验证其他字符串
m=pat.search("AABCD") #search字符串被校验的内容
#输出结果会显⽰查询到⼀个匹配的位置
#直接去进⾏匹配:
m=re.search("asd","AAasd")#前⾯是规则,后⾯是进⾏匹对的对象
print(m)
#使⽤findall匹配:
print(re.findall("[A-Z]"),"asffsaOGUGFU")#输出多个单个字符
print(re.findall("[A-Z]+"),"asffsaOGUGFU")#输出多个多字符串
#sub替换
print(re,sub("a","A","abcdasd")) #到a⽤A替换,在第三个字符串查
#r(去除转义\的影响),建议在正则表达式中,被⽐较的字符串前⾯加上⼀个r
a=r"\aabd-\"
print(a)
四:使⽤re逐⼀解析数据:
1.从源码中获取详细字符串⽚段:
import re
findLink=repile(r'<a href="(.*?)">')
#<img alt="肖申克的救赎" class="" src="img3.douban/view/photo/s_radio">
findImgSrc=repile(r'<img.*src="(.*?)"',re.S)#re.S忽略换⾏符
#影⽚⽚名
findTitle=replie(r'<spam class="title">(.*)</span>)
#影⽚评分
findRating=,,,,,,,,,,,,,,,,,,,,,,
#获取到页⾯数据并保存到html中
html=askURL(url)
#注意解析数据:
soup=BeautifulSoup(html,"html.parse")
for item in soup.find_all('div',class_="item"): #到符合要求的字符串,形成列表
data=[] #保存⼀部电影的所有信息
item=str(item)
#获取详情信息
Link=re.findall(findLink,item)[0]#注意:这⾥使⽤findall是吧findLink中正则表达式在item中查并将其赋值给Link 2.标签解析:(承接上⾯的内容)
data=[] #保存⼀部电影的所有信息
Link=re.findall(findLink,item)[0]
data.append(Link)
#如果遇到了多个数据的返回对象;
title=re.findall(findTitle,item)#标题可能会有中⽂名和英⽂名
if(len(titles)==2):
ctitle=titles[0]
data.append(ctitle)
otitle=titles[1].replace("/"."")#去掉⽆关符号,去掉/符号python正则表达式匹配小数
data.append(otitle)
else:
data.append(titles[0])
data.append('')#外国名字留空
#同时也可以对⽤re提取到的字符串进⾏替换或者增删改查
bd=re.findall(findBd,item[0])
bd=re.sub('<br(\s+)?/>(\s+)?',"",bd) #去掉<br/>
bd=re.sub('/',"",bd)#替换/
data.append(bd.stri())#去掉前后空格之后的内容
#以上这些都是往⼀个data电影信息列表中加⼊
#想要得到多个电影信息,使⽤for循环,然后放到datalist中就好了
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论