发布于2020-03-11 19:54 阅读(2308) 评论(0) 点赞(10) 收藏(2)
正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。正则表达式并非Python独有,许多编程语言如Java均有对其的实现。Python中主要由re模块实现正则表达式的使用。
正则表达式说到底就是一款工具,一款用于匹配字符串的工具。正则表达式内容繁琐,不建议死记硬背,每次用熟几个,久而久之就记得住了。这里介绍一个网站和一张表,便能很好地掌握正则表达式了。
正则表达式的在线测试工具:https://tool.oschina.net/regex
正则表达式匹配规则表:
re模块主要提供了match()、search()、findall()等方法实现正则表达式
常规使用:
str = "I love China!520!" #定义待匹配字符串
regExp = "^\w\s\w{4}\s\w{5}\S\d{3}.*" #定义匹配规则
result = re.match(regExp,str)
print(result)
print(result.group()) #输出匹配到的内容
print(result.span()) #输出匹配到的范围
输出结果为:
<re.Match object; span=(0, 17), match=‘I love China!520!’>
I love China!520!
(0, 17)
使用group()获得特定内容:在正则表达式中,对想要获得内容的地方添加括号
str = "I love China!520!" #定义待匹配字符串
regExp="^\w\s(\w{4})\s(\w{5})\S\d{3}.*" #定义匹配规则,对两个地方添加了括号!
result = re.match(regExp,str)
print(result)
print(result.group(1)) #输出匹配到的内容1
print(result.group(2)) #输出匹配到的内容2
输出结果为:
<re.Match object; span=(0, 17), match=‘I love China!520!’>
love
China
还可以指定修饰符
讲love改为LOVE,尝试re.I的作用:
str = "I love China!520!" #定义待匹配字符串
regExp = "^\w\sLOVE\s\w{5}\S\d{3}.*" #定义匹配规则
result = re.match(regExp,str,re.I)
print(result)
print(result.group()) #输出匹配到的内容
print(result.span()) #输出匹配到的范围
match()有一个缺陷就是它是从字符串的开头开始匹配的,一旦开头就不匹配,就失败了。但我们实际应用是获取字符串中符合规则的子串,所以就要用到search()了,search()可以扫描整个字符串并返回第一个匹配的字串。
findall()与search()类似,不过它是返回所有的结果。
import re
import requests
if __name__ == '__main__':
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36"
}
html = requests.get("https://bbs.hupu.com/all-gambia",headers=headers) #虎扑老jr了
# print(html.text)
results = re.findall('<li>.*?<span class="textSpan">.*?href="(.*?)".*?title="(.*?)".*?<span class="forum">.*?>(.*?)<.*?</li>',html.text,re.S)
for result in results:
print("链接:","https://bbs.hupu.com"+result[0],end=' ')
print("标题:",result[1],end=' ')
print("来源:",result[2])
输出结果为:
sub()可以将正则表达式指定的内容修改:
str = "你欠我100块钱"
str_1 = re.sub('\d+','1000',str)
print(str_1)
结果输出为:
你欠我1000块钱
compile()可以将字符串编译成正则表达式对象,通过查看源码知道,我们调用每一个方法时,该方法内部都会调用一个私有方法_compile(),就是将该字符串形式的正则表达式转换成真正的正则表达式对象。
有错误的地方敬请指出!觉得写得可以的话麻烦给个赞!欢迎大家评论区或者私信交流!
作者:32738ew
链接:https://www.pythonheidong.com/blog/article/252502/f57c191a3bb778afba93/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!