Python全栈之路正则函数

 更新时间:2021年11月30日 14:50:35   作者:熬夜泡枸杞  
这篇文章主要为大家介绍了Python正则函数,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

1. 反向引用_命名分组

# ### 反向引用
import re
strvar = "<div>明天又要休息了</div>"
obj = re.search("<(.*?)>(.*?)<(.*?)>",strvar)
print(obj)
# 获取匹配到的内容
res1 = obj.group()
print(res1)
# 获取分组里的内容
res2 = obj.groups()
print(res2)
# 反向引用的语法 \1把第一个括号里面匹配到的内容在引用一次
obj = re.search(r"<(.*?)>(.*?)</\1>",strvar)
print(obj)
print(obj.group())
print(obj.groups())
strvar = " z3d4pzd a1b2cab "
obj = re.search(r"(.*?)\d(.*?)\d(.*?)\1\2",strvar)
print(obj)
print(obj.group())
print(obj.groups())
# ### 命名分组
"""
3) (?P<组名>正则表达式) 给这个组起一个名字
4) (?P=组名) 引用之前组的名字,把该组名匹配到的内容放到当前位置
"""
# 写法一
strvar = " z3d4pzd a1b2cab "
obj = re.search(r"(?P<tag1>.*?)\d(?P<tag2>.*?)\d(?P<tag3>.*?)\1\2",strvar)
print(obj)
print(obj.group())
# 写法二
strvar = " z3d4pzd a1b2cab "
obj = re.search(r"(?P<tag1>.*?)\d(?P<tag2>.*?)\d(?P<tag3>.*?)(?P=tag1)(?P=tag2)",strvar)
print(obj)
print(obj.group())

2. 正则函数

# ### 正则函数
import re
# search   通过正则匹配出第一个对象返回,通过group取出对象中的值
strvar = "3+4 6*4"
obj = re.search(r"(\d+[+*]\d+)",strvar)
print(obj)
# 获取匹配到的内容
print(obj.group())
# 获取分组当中的内容 (返回元组)
print(obj.groups())
# match    验证用户输入内容 (了解)
"""search在正则表达式的前面加上^ 等价于 match ,其他用法上一模一样"""
strvar = "a17366668888"
strvar = "17366668888"
# obj = re.search(r"^\d+",strvar)
# obj = re.match(r"\d+",strvar)
# print(obj.group())
print(obj)
# split    切割
strvar = "alex|wusir_xboyww@risky"
lst = re.split("[|_@]",strvar)
print(lst)
strvar = "alex2341273894wusir234234xboyww11111risky"
lst = re.split("\d+",strvar)
print(lst)
# sub      替换 
strvar = "alex|wusir_xboyww@risky"
"""
strvar = strvar.replace("|","&")
strvar = strvar.replace("_","&")
strvar = strvar.replace("@","&")
print(strvar)
"""
# sub(正则,替换的字符,原字符串[,替换的次数])
res = re.sub("[|_@]","&",strvar)
res = re.sub("[|_@]","&",strvar,1)
print(res)
# subn     替换  (用法上与sub相同,只是返回值不同)
res = re.subn("[|_@]","&",strvar)
res = re.subn("[|_@]","&",strvar,2)
print(res) 
# res = re.sub("[|_@]","&",strvar)
# ('alex&wusir&xboyww@risky', 2)
# finditer 匹配字符串中相应内容,返回迭代器
"""返回的是迭代器,迭代器中包含了对象 对象.group来获取匹配到的值"""
from collections import Iterator, Iterable
strvar = "sdf23647fdgdfg()*()*23423423"
it = re.finditer("\d+",strvar)
print(isinstance(it,Iterator))
for obj in it:
	print(obj.group())
# compile  指定一个统一的匹配规则
"""
正常情况下,正则表达式编译一次,执行一次
为了避免反复编译,节省时间空间,可以使用compile统一规则
编译一次,终身受益
"""
strvar = "asdfs234sdf234"
pattern = re.compile("\d+")
print("<===>")
obj = pattern.search(strvar)
print(obj.group())
lst = pattern.findall(strvar)
print(lst)
# 修饰符 
# re.I 使匹配对大小写不敏感
strvar = "<h1>大标题</H1>"
pattern = re.compile("<h1>(.*?)</h1>" , flags=re.I)
obj = pattern.search(strvar)
print(obj.group())
# re.M 使每一行都能够单独匹配(多行匹配),影响 ^ 和 $
"""单行独立匹配,而不是整体匹配"""
strvar = """
<p>111</p>
<a>222</a>
<strong>333</strong>
"""
pattern = re.compile("^<.*?>(?:.*?)<.*?>$" , flags=re.M)
lst = pattern.findall(strvar)
print(lst)
# re.S 使 . 匹配包括换行在内的所有字符
strvar = """
give
sdfsdfmefive
"""
# 多个修饰符一起使用通过|拼接
pattern = re.compile(".*?mefive" , flags = re.S|re.I|re.M )
obj = pattern.search(strvar)
print(obj.group())

小提示:

爬虫爬数据的时候用finditer,数据太大,用迭代器存
strvar = """
<p>111</p>
<a>222</a>
<strong>333</strong>
"""
pattern = re.compile("^<.*?>(?:.*?)<.*?>$")
lst = pattern.findall(strvar)
print(lst) # 这里的结果为[] 因为.不匹配换行符,所以不会返回结果
pattern = re.compile("^<.*?>(?:.*?)<.*?>$",flags=re.M) 这里就是
一行的一行的匹配了
不会用for i in找思路 
不会用.*?找思路

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

相关文章

  • Python爬虫学习之翻译小程序

    Python爬虫学习之翻译小程序

    这篇文章主要为大家详细介绍了Python爬虫学习之翻译小程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • 详解Python中文分词而生的jieba库

    详解Python中文分词而生的jieba库

    这篇文章主要介绍了详解Python中文分词而生的jieba库,在Python中,最好用的中文分词库是jieba。用“结巴”给一个中文分词库命名,非常生动形象,同时还带有一种程序员式的幽默感,需要的朋友可以参考下
    2023-07-07
  • Python排序搜索基本算法之希尔排序实例分析

    Python排序搜索基本算法之希尔排序实例分析

    这篇文章主要介绍了Python排序搜索基本算法之希尔排序,简单说明了希尔排序的原理并结合实例形式分析了Python实现希尔排序的具体操作技巧,需要的朋友可以参考下
    2017-12-12
  • pyinstaller打包exe程序的步骤和添加依赖文件的实现

    pyinstaller打包exe程序的步骤和添加依赖文件的实现

    这篇文章主要介绍了pyinstaller打包exe程序的步骤和添加依赖文件的实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • Python队列Queue超详细讲解

    Python队列Queue超详细讲解

    Queue是python标准库中的线程安全的队列(FIFO)实现,提供了一个适用于多线程编程的先进先出的数据结构,即队列,用来在生产者和消费者线程之间的信息传递,本文给大家讲解Python队列Queue的相关知识,需要的朋友参考下吧
    2023-04-04
  • 在双python下设置python3为默认的方法

    在双python下设置python3为默认的方法

    这篇文章主要介绍了如何在双python下设置python3为默认,本文通过一个例子分步骤给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-10-10
  • python实现逢七拍腿小游戏的思路详解

    python实现逢七拍腿小游戏的思路详解

    这篇文章主要介绍了python实现逢七拍腿小游戏的思路,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • 利用Python中的pandas库对cdn日志进行分析详解

    利用Python中的pandas库对cdn日志进行分析详解

    这篇文章主要介绍了利用Python中的pandas库进行cdn日志分析的相关资料,文中分享了pandas对cdn日志分析的完整示例代码,然后详细介绍了关于pandas库的相关内容,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-03-03
  • Python使用asyncio标准库对异步IO的支持

    Python使用asyncio标准库对异步IO的支持

    Python中,所有程序的执行都是单线程的,但可同时执行多个任务,不同的任务被时间循环(Event Loop)控制及调度,Asyncio是Python并发编程的一种实现方式;是Python 3.4版本引入的标准库,直接内置了对异步IO的支持
    2023-11-11
  • Python中numpy的np.percentile百分位函数举例详解

    Python中numpy的np.percentile百分位函数举例详解

    在python中计算一个多维数组的任意百分比分位数,此处的百分位是从小到大排列,只需用np.percentile即可,这篇文章主要给大家介绍了关于Python中numpy的np.percentile百分位函数的相关资料,需要的朋友可以参考下
    2024-08-08

最新评论