python3中的RE(正则表达式)-总结2--补充

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>&nbsp;<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>&nbsp;<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()

#执行结果如下图:

  • 21
    点赞
  • 93
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值