Python全栈之路正则函数
作者:熬夜泡枸杞 时间:2022-03-19 05:03:51
目录
1. 反向引用_命名分组
2. 正则函数
小提示:
总结
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找思路
不会用.*?找思路
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!
来源:https://blog.csdn.net/weixin_46818279/article/details/121315758
标签:Python,正则,函数
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
关于文件命名
2009-09-18 16:29:00
HTML标签tbody的用法
2009-11-02 10:11:00
Favicon图标小常识
2010-04-01 12:01:00
解析PHP观察者模式Observer
2023-07-08 13:38:58
![](https://img.aspxhome.com/file/2023/2/55402_0s.jpg)
PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】 <font color=red>原创</font>
2023-11-16 07:37:55
另外一种斜体的导航条
2008-11-05 12:24:00
python多线程http压力测试脚本
2022-12-31 16:48:37
页面设计之个性元素与共性元素
2008-07-17 12:36:00
![](https://img.aspxhome.com/file/UploadPic/20087/17/200871712436841s.jpg)
如何通过Python实现定时打卡小程序
2023-10-20 14:11:33
![](https://img.aspxhome.com/file/2023/9/82579_0s.png)
如何通过PHP实现Des加密算法代码实例
2023-10-08 09:41:55
网页优化之加速图片显示(CSS Sprite)
2007-09-29 21:39:00
![](https://img.aspxhome.com/file/UploadPic/20079/29/200792921437566s.gif)
简要介绍SQL Server 2008新的事件处理系统
2009-12-22 08:15:00
![](https://img.aspxhome.com/file/UploadPic/20101/11/210u51y4y-40s.jpg)
FrontPage2002简明教程四:网页超级链接
2008-09-17 11:23:00
![](https://img.aspxhome.com/file/UploadPic/200810/17/20081017113025456s.jpg)
如何使用图片精灵优化你的网站
2009-07-21 11:35:00
![](https://img.aspxhome.com/file/UploadPic/20097/21/how_to_image_sprites-95s.jpg)
python 绘制场景热力图的示例
2022-01-22 07:03:21
![](https://img.aspxhome.com/file/2023/0/80560_0s.jpg)
python中*args与**kwarsg及闭包和装饰器的用法
2023-07-24 00:43:34
![](https://img.aspxhome.com/file/2023/6/60956_0s.png)
用MSXML2.ServerXMLHTTP的setTimeouts属性解决并死问题
2010-03-02 20:21:00
SQL Server重温 事务
2012-08-21 10:48:15
历数Firefox2.0对XML处理的改进
2007-11-27 12:41:00
![](https://img.aspxhome.com/file/UploadPic/200711/27/20071127125113381s.jpg)
python中执行shell的两种方法总结
2023-03-12 15:20:39