re模块的高级用法:
1.search(全局搜索,只要有就返回,不再继续往下找),用法和match一样:
例一. search简单实例
import re
#search的用法
str = "<span><h1>hello world!</h1></span>"
pattern = r"hello"
result = re.search(pattern, str)
result.group()
#执行结果如下:
例二. search匹配字符串中的数字:
import re
#读取字符串中文章浏览次数
str = "浏览次数为: 8098"
pattern = r"\d+"
result = re.search(pattern, str)
result.group()
#执行结果如下:
2. findall获取所有匹配的查找
例三.
import re
#findall方法取得所有满足的查找
str = "itwang</h1>sdfhjkd</html>itli</h1>"
pattern = r"\w+</h1>"
result = re.findall(pattern, str)
print(result)
#执行如下图:
3. sub 将匹配到的数据进行替换
例四:
import re
#sub将匹配到的数据进行替换
str = "python_score = 98"
pattern = "\d+"
result = re.sub(pattern, "100", str)
print(result)
#执行结果如下:
例四-2:与函数结合使用
import re
#与函数配合使用
str = "python=96, math=93"
pattern = "\d+"
def replace(result)
pass
return "99"
#被查出的[96,93]都会被当做参数分别在调用replace函数时当做参数被传进去,可自行修改replace函数测试.
result = re.sub(pattern, replace, str)
print(result)
#执行结果如下图:
4. python中""" """可以定义一个原生字符串(也就是说,不管该字符串有双引号单引号,都会保留,不用我们自己进行转义等特殊处理),例如下面一个字符串:
str="""
<div>
<p>岗位职责: </p>
<p>完成推荐算法、 数据统计、 接⼝、 后台等服务器端相关⼯作</p>
<p><br></p>
<p>必备要求: </p>
<p>良好的⾃我驱动⼒和职业素养, ⼯作积极主动、 结果导向</p>
<p> <br></p>
<p>技术要求: </p>
<p>1、 ⼀年以上 Python 开发经验, 掌握⾯向对象分析和设计, 了解设计模式</p>
<p>2、 掌握HTTP协议, 熟悉MVC、 MVVM等概念以及相关WEB开发框架</p>
<p>3、 掌握关系数据库开发设计, 掌握 SQL, 熟练使⽤ MySQL/PostgreSQL 中的⼀种<br></p>
<p>4、 掌握NoSQL、 MQ, 熟练使⽤对应技术解决⽅案</p>
re模块的⾼级⽤法33
<p>5、 熟悉 Javascript/CSS/HTML5, JQuery、 React、 Vue.js</p>
<p> <br></p>
<p>加分项: </p>
<p>⼤数据, 数理统计, 机器学习, sklearn, ⾼性能, ⼤并发。 </p>
</div>
"""
5. 贪婪模式 和 非贪婪模式
例五: 贪婪模式
import re
#贪婪模式(尽可能多的匹配字符,看例子)
str = "This is a number 234-235-22-423"
pattern = r"(.+)(\d+-\d+-\d+-\d+)"
result = re.match(pattern, str)
result.groups()
#分析
#由pattern可知str被分成两组,因为默认情况下为贪婪模式,所以
# 第一组会在保证第二组符合的情况下, 尽可能的匹配多的字符
#所以推断:
# 第一组: This is a number 23
# 第二组: 4-235-22-423
# 这样既可以是第二组情况符合,而又使得第一组尽可能贪婪地匹配到最多的字符
#执行结果如下:
例六:非贪婪模式:(?加载表达式后,可以开启非贪婪模式)
import re
#非贪婪模式(尽可能少的匹配字符,看例子) ? 的使用
str = "This is a number 234-235-22-423"
pattern = r"(.+?)(\d+-\d+-\d+-\d+)"
result = re.match(pattern, str)
result.groups()
#分析
#由pattern可知str被分成两组,因为使用?所以为非贪婪模式,所以
# 第一组会在保证第二组符合的情况下, 尽可能的匹配少的字符
#所以推断:
# 第一组: This is a number
# 第二组: 234-235-22-423
# 这样既可以是第二组情况符合,而又使得第一组尽可能匹配到最少的字符
#执行结果如下:
例七: 正则在爬虫中的应用,爬取网页中<img>标签中图片的url连接内容
import re
爬取网页中<img>标签中图片的url链接内容
str = """<img data-original="https://rpic.douyucdn.cn/appCovers/2016/11/13/1213973_201611131917_small.jpg" src="https://rpic.douyucdn.cn/appCovers/2016/11/13/1213973_201611131917_small.jpg" style="display: inline;">"""
pattern1 = r"https.+\.jpg"
pattern2 = r"https.+?\.jpg"
result = re.search(pattern1, str)
result.groups()
result = re.search(pattern2, str)
result.groups()
#执行结果如下图: