提示:这里可以添加本文要记录的大概内容:
正则表达式是字符串处理的有力工具和技术。
使用正在表达式的目的:
1、给定的字符串是否符合正则表达式的过滤逻辑(称作"匹配")。
2、可以通过正则表达式,从字符串中获取我们想要的特定部分。
Python中,re模块import re
提供了正则表达式操作所需要的功能。
常用正则表达式
提示:以下是本篇文章正文内容,下面案例可供参考
扫描整个字符串,搜索匹配第一个位置
返回match对象
re.search(pattern, string, flags=0)
参数说明:
Pattern:要匹配的正则表达式String:要匹配的字符串
Flags:控制正则表达式的匹配方式
【例】http://emotion.bxbw-jyz.cn/Home/index/showPartData.html
打开上面的网站,右键查看页面源代码,找音频编号(我的在61行,或许每个人的都不一样)
查找音频编号,代码如下(示例):
import requests
import re
def getHTMLContent(url):try:r=requests.get(url,timeout=30)r.raise_for_status()return r.textexcept:return"访问异常"if __name__=="__main__":url="http://emotion.bxbw-jyz.cn/Home/index/showPartData.html"demo=getHTMLContent(url)wav_number=re.search(r'音频编号#(.+?)#',demo) # .+?是匹配任意字符,即是上面截图中的#3502#print(wav_number)
用来提出分组截获的字符串,()用来分组
正则表达式中的三组括号把匹配结果分成三组
• group() 同group(0)是匹配正则表达式整体结果
• group(1) 列出第一个括号匹配部分
• group(2) 列出第二个括号匹配部分
• group(3) 列出第三个括号匹配部分
【例】http://emotion.bxbw-jyz.cn/Home/index/showPartData.html
打开上面的网站,右键查看页面源代码,找音频编号(我的在第9和第60行,或许每个人的都不一样)
查找
标签和序号开头结尾,代码如下(示例):
import requests
import re
def getHTMLContent(url):try:r=requests.get(url,tiemout=30)r.raise_for_status()return r.textexcept:return"访问异常"if __name__=="__main__":url="http://emotion.bxbw-jyz.cn/Home/index/showPartData.html"demo = getHTMLContent(url)wav_number1=re.search(r'序号:(.+?)',demo) #序号开头结尾wav_number2=re.search(r'(.+?) ',demo) #print(wav_number1.group(),wav_number2.group())print(wav_number1.group(0),wav_number2.group(0))print(wav_number1.group(1),wav_number2.group(1))
从字符串的起始位置(第一个字符)匹配正则表达式
re.match(pattern, string, flags=0)
参数说明
• pattern:要匹配的正则表达式
• string:要匹配的字符串
• flags:控制正则表达式的匹配方式
【例1】http://emotion.bxbw-jyz.cn/Home/index/showPartData.html
打开上面的网站,右键查看页面源代码
从第一个字符开始匹配,匹配:音频编号
import requests
import re
def getHTMLContent(url):try:r=requests.get(url, timeout=30)r.raise_for_status()return r.textexcept:return "访问异常"if __name__=="__main__":url="http://emotion.bxbw-jyz.cn/Home/index/showPartData.html"demo=getHTMLContent(url)wav_number=re.match(r'音频编号#(.+?)#',demo) # .+?是匹配任意字符print(wav_number)
【例2】http://emotion.bxbw-jyz.cn/Home/index/showPartData.html
多了个切分,从音频编开始切,分为两部分
import requests
import re
def getHTMLContent(url):try:r=requests.get(url,timeout=30)r.raise_for_status()return r.textexcept:return"访问异常"if __name__=="__main__":url="http://emotion.bxbw-jyz.cn/Home/index/showPartData.html"demo=getHTMLContent(url)demo2=demo.split('音频编',1) #切分2部分wav_number=re.match(r'号#(.+?)#', demo2[1]) #从头匹配print(wav_number)
搜索字符串,返回形式为列表
re.findall(pattern, string, flags=0)
参数说明
pattern:要匹配的正则表达式
string:要匹配的字符串
flags:控制正则表达式的匹配方式
【例】http://emotion.bxbw-jyz.cn/Home/index/showPartData.html
要所有的音频编号信息列表
import requests
import re
def getHTMLContent(url):try:r=requests.get(url,timeout=30)r.raise_for_status()return r.textexcept:return"访问异常"if __name__=="__main__":url="http://emotion.bxbw-jyz.cn/Home/index/showPartData.html"demo=getHTMLContent(url)wav_number=re.findall(r'音频编号#(.+?)#', demo)print(wav_number)
【例2】http://emotion.bxbw-jyz.cn/Home/index/showPartData.html
查所有序号、专家ID、专家名字、grade流畅度、音频名字、png图片
# -*- coding: utf-8 -*-
import requests
import re
def getHTMLContent(url):try:r=requests.get(url,timeout=30)r.raise_for_status()return r.textexcept:return"访问异常"
if __name__=="__main__":url="http://emotion.bxbw-jyz.cn/Home/index/showPartData.html"demo = getHTMLContent(url)#信息提取yinpinbianhao = re.findall(r'音频编号#(.+?)#', demo) #拿音频编号xuhao = re.findall(r'序号:(.+?)', demo) #拿序号zhuanjiaid = re.findall(r'专家ID#(.+?)', demo) #拿专家idzhuanjiamingzi = re.findall(r'专家名字_(.+?)', demo) #拿专家名字liuchangdu = re.findall(r'form-control" id="(.+?)"', demo) #拿流畅度audio_src = re.findall(r'audio src="(.+?)', demo) #拿音频路径img_src = re.findall(r'img_src="(.+?)"', demo) #拿图片路径for i in range(len(yinpinbianhao)):print(xuhao[i],yinpinbianhao[i],zhuanjiaid[i],zhuanjiamingzi[i],liuchangdu[i],audio_src[i],img_src[i])
搜索字符串,返回匹配字符串的迭代器。
re.finditer(pattern, string, flags=0)
参数说明
pattern:要匹配的正则表达式
string:要匹配的字符串
flags:控制正则表达式的匹配方式
【例】http://emotion.bxbw-jyz.cn/Home/index/showPartData.html
获取所有信息,返回匹配信息的迭代器
import requests
import re
def getHTMLContent(url):try:r=requests.get(url,timeout=30)r.raise_for_status()return r.textexcept:return"产生异常"if __name__=="__main__":url="http://emotion.bxbw-jyz.cn/Home/index/showPartData.html"demo = getHTMLContent(url)wav_number = re.finditer(r'音频编号#(.+?)#', demo)for wave in wav_number:print(wave.group)
按照匹配的子串,将字符串分割返回列表
re.split(pattern, string, maxsplit=0, flags=0)
参数说明
pattern:匹配模式
string: 待搜索的字符串
maxsplit:最大的分割数
【例1】
import re
if __name__ == "__main__":wav_number = re.split(r'ab(.+?)#','43ab1#ertueab2#tyerab3#gldgk',3)wav_number1 = re.split(r'ab','43ab1#ertueab2#tyerab3#gldgfgdfk',3)print('wav_number:',wav_number)print('len of wav_number:',len(wav_number))print(' ---------------')print('wav_number1: ',wav_number1)print('len of wav_number1: ',len(wav_number1))wav_number =re.split(r'ab(.+?)#,43ab1#ertueab2#tyerab3#gldgk',3)wav_number1 = re.split(r'ab','43ab1#ertueab2#tyerab3#gldgfgdfk',3)
【例2】http://emotion.bxbw-jyz.cn/Home/index/showPartData.html
爬虫的正则表达式,用re.split方法实现
切片,切100刀,看看能切出多少块,切出的每一块是什么
import requests
import re
def getHTMLContent(url):try:r=requests.get(url,timeout=30)r.raise_for_status()return r.textexcept:return"访问异常"if __name__=="__main__":url="http://emotion.bxbw-jyz.cn/Home/index/showPartData.html"demo = getHTMLContent(url) wav_number=re.findall(r'音频编号#(.+?)#', demo)print(len(wav_number))wav_number1=re.split(r'音频编号#(.+?)#', demo,100)print(len(wav_number1))print('----------------------')print(wav_number1[0])print('----------------------')print(wav_number1[1])print('----------------------')print(wav_number1[2])print('----------------------')print(wav_number1[3])print('----------------------')
替换所有匹配正则表达式的字串,返回替换后的字符串
re.sub(pattern, repl, string,count=0 , flags=0)
参数说明
pattern:匹配模式
repl : 替换的字符串
String: 待搜索的字符串
count : 替换的最大次数
【例】把匹配出来的信息替换成NID
import requests
import re
def getHTMLContent(url):try:r=requests.get(url,timeout=30)r.raise_for_status()return r.textexcept:return"访问异常"if __name__=="__main__":url="http://emotion.bxbw-jyz.cn/Home/index/showPartData.html"demo = getHTMLContent(url) wav_number = re.sub(r'音频编号#(.+?)#','NID',demo)wav_number1 = re.findall(r'音频编号#(.+?)#', wav_number)wav_number2 = re.findall('NID', wav_number)print(len(wav_number1))print(len(wav_number2))
【例1】http://emotion.bxbw-jyz.cn/Home/index/showPartData.html
看selected的都有哪些情绪信息
import requests
import re
def getHTMLContent(url):try:r=requests.get(url,timeout=30)r.raise_for_status()return r.textexcept:return"访问异常"if __name__=="__main__":url="http://emotion.bxbw-jyz.cn/Home/index/showPartData.html"demo = getHTMLContent(url) emotion=re.findall(r'(.+?)
【例2】http://emotion.bxbw-jyz.cn/Home/index/showPartData.html
当前音频编号是对应情绪?
import requests
import re
dict = {}
def getHTMLContent(url):try:r = requests.get(url,timeout=30)r.raise_for_status()return r.textexcept:return"访问异常"if __name__=="__main__":url="http://emotion.bxbw-jyz.cn/Home/index/showPartData.html"demo = getHTMLContent(url) wav_number = re.findall(r'音频编号#(.+?)#',demo)emotion = re.findall(r'(.+?)',demo)for index in range(len(emotion)):print("%s:%s"%(emotion[index],wav_number[index]))
【例3】http://emotion.bxbw-jyz.cn/Home/index/showPartData.html
把序号、音频编号、情绪都输出
import requests
import re
dict = {}
def getHTMLContent(url):try:r = requests.get(url,timeout=30)r.raise_for_status()return r.textexcept:return"访问异常"if __name__=="__main__":url="http://emotion.bxbw-jyz.cn/Home/index/showPartData.html"demo = getHTMLContent(url) name = re.findall(r'>序号:(.+?)', demo)yinpinbianhao = re.findall(r'音频编号#(.+?)#', demo)plt = re.findall(r'(.+?)', demo)#获取中带有selected的内容,注意selected后面有0个或多个空格for index in range(len(plt)):name1=name[index]emotion = plt[index]yinpinbianhao1=yinpinbianhao[index]print("%s:%s:%s"%(name1,emotion,yinpinbianhao1))dict[name1]=emotion
【例4】http://emotion.bxbw-jyz.cn/Home/index/showPartData.html
获取对应的音频链接
src=和class中间的内容,引号会带着(那是字符串)
import requests
import re
new_wav = []
def getHTMLContent(url):try:r = requests.get(url,timeout=30)r.raise_for_status()return r.textexcept:return"访问异常"if __name__=="__main__":url="http://emotion.bxbw-jyz.cn/Home/index/showPartData.html"demo = getHTMLContent(url) wav_number=re.findall(r'audio src=(.+?)class', demo)for index in range(len(wav_number)):new_wav_index = "http://emoution.bxbw-jyz.cn" + wav_number[index][1:-2]new_wav.append(new_wav_index)print(new_wav)
音频只有一百个,每个音频重复了三次
下一篇:_cpp 位图