首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

盘点Python正则表达式中的贪婪模式和非贪婪模式

潮落夜江斜月里,两三星火是瓜洲。

大家好,我是我是皮皮。

一、前言

二、解决过程

import re

txt = "This is an HTML tag: <head>HEADER</head>. It means the head of the whole HTML document."

pattern1 = re.compile(r"<.*>")

pattern2 = re.compile(r"<.*?>")

result1 = re.findall(pattern1, txt)

result2 = re.findall(pattern2, txt)

print(result1)

print(result2)

输出结果如下图所示:

关于输出的解析如下:

我想匹配HTML标签中的数据,也就是<>之间的数据。

pattern1 = re.compile(r"<.*>")

pattern2 = re.compile(r"<.*?>")

这两种只相差了一个?,但是区别却很大。解析如下图所示:

直到什么时候停止呢?

这个就是贪婪模式的匹配方式,那么非贪婪模式呢?

小彩蛋

分享一个【小王】大佬的代码,实现的效果是将正则匹配结果写成命名分组Python代码。

常规写法如下所示:

import re

txt = "This is an HTML tag: <head>HEADER</head>. It means the head of the whole HTML document."

tag = re.compile(r"<([A-Za-z0-9]+)>.*?</\1>.*")

print(re.findall(tag, txt))

写成命名分组的写法如下所示:

总结

大家好,我是皮皮。这篇文章基于粉丝提问,针对Python正则表达式中的贪婪模式和非贪婪模式问题,给出了具体说明和演示,顺利的帮助粉丝解决了问题。

最后感谢粉丝【杰】提问,感谢【小王】大佬给出的解答和示例,感谢【(这是月亮的背面)】、【dcpeng】、【wangning】、【Chloé P.】等大佬们参与学习交流。

-------------------End-------------------

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OlXuVx7f3W_aMJAhw7Zl8AHA0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券