正则表达式{}和(),pyhton里的正则表达式,函数findall解析

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕


目录


📚📗📕📘📖🕮💡📝🗂️✍️🛠️💻🚀🎉🏗️🌐🖼️🔗📊👉🔖⚠️🌟🔐⬇️·正文开始⬇️·🎥😊🎓📩😺🌈🤝🤖📜📋🔍✅🧰❓📄📢📈 🙋0️⃣1️⃣2️⃣3️⃣4️⃣5️⃣6️⃣7️⃣8️⃣9️⃣🔟🆗*️⃣#️⃣

正则表达式{}和(),pyhton里的正则函数findall解析

解决:

a="aa123bb123cc123"

b=re.findall(r"([a-z]+123){2}",a)

print(b)

输出结果为什么是["bb123"]而不是["aa123bb123"]

📚0. 匹配到的结果就是aa123bb123,但返回给你的是bb123,详细过程如下

📚1.科普在前面的基本知识,但是有必要了解一下:

正则表达式(Regular Expression,简称Regex或Reg Exp),是一种文本模式匹配工具,可以匹配普通字符特殊字符等。

正则表达式提供了一种灵活且强大的方式来查找、替换、验证和提取文本数据。

正则表达式并不是Python的一部分。而是一套独立于编程语言,用于处理复杂文本信息的强大的高级文本操作工具。正则表达式拥有自己独特的规则语法以及一个独立的正则处理引擎,我们根据正则语法编写好规则(模式)以后,引擎不仅能够根据规则进行模糊文本查找,还可以进行模糊分割,替换等复杂的文本操作,能让开发者随心所欲地处理文本信息。

📚2.正则匹配到的结果如下。(正则匹配到的结果就是aa123bb123)

根据正则表达式的匹配规则:

字符串为aa123bb123cc123

匹配规则为([a-z]+123){2}

匹配到的结果就是 aa123bb123

📘测试1:

如图,测试结果:

测试地址:https://tool.chinaz.com/regex/

📘测试2:

另一个测试结果:

测试地址:https://tool.oschina.net/regex

📚3.现在回到这个问答题,print(b) 那为什么,返回的结果是["bb123"]而不是["aa123bb123"]?

因为python里的findall

findall的结果取决于模式中捕获的数量,如果没有组,则返回与整个模式匹配的字符串列表。如果只有一个组,则返回与组匹配的字符串列表。如果存在多个组,则返回与这些组匹配的字符串元组列表。非捕获组不会影响结果的形式。

结果取决于模式中捕获组的数量,解析如下:

  1. 没有组的情况下,返回与整个模式匹配的字符串列表
  2. 有一个组的情况下,返回与组匹配的字符串列表
  3. 有多个组的情况下,返回与这些组匹配的字符串元组列表

文档地址:https://docs.python.org/3/library/re.html#re.findall

返回结果取决于组的数量

python 复制代码
 b = re.findall(r"([a-z]+123){2}", a)
#这里是一个组"一个()",返回一个组

📚4. 下面对findall的3种情况进行分析:

📘4.1 没有组的情况下

也可以这样理解,这里的这个组与原本正则里的()重复了,冲突了。但是这个是在python里,所以优先使用python里的规则。虽然匹配到的是aa123bb123,但是返回的是bb123。

再详细拆解一下这个地方规则:

当aa123bb123匹配到时,aa123和bb123其实是[a-z]+123和[a-z]+123。也就是说aa123bb123的匹配规则是[a-z]+123[a-z]+123,如果没有组,就全部返回给你。可是你有组,这个组并不是原先正则里的括号,在python里,把这个括号赋予了新的意义。叫组。返回结果受组的影响。

你可以亲自测试一下,没有组的结果

python 复制代码
import re

a = "aa123bb123cc123"
b = re.findall(r"[a-z]+123[a-z]+123", a)  # 这里没有组,没有()
print(b)

总结:在没有组的情况下,找到啥就给你啥。全部给你!

📘4.2 有一个组的情况下

📖 4.2 .1 当有一个组,没有后面的{}
python 复制代码
import re

a = "aa123bb123cc123"
b = re.findall(r"([a-z]+123)", a)   # 当有一个组,没有后面的{}
print(b)

输出 ['aa123', 'bb123', 'cc123']

📖 4.2 .2 当有一个组,有后面的{},并且是2,为例子。
python 复制代码
import re

a = "aa123bb123cc123"
b = re.findall(r"([a-z]+123){2}", a)   # 当有一个组,有后面的{}
print(b)

输出 ['bb123']

你有组,就只能从这个匹配结果中,返回中取出一部分给你

取出哪一部分呢,第一部分不符合因为你是{2},第一部分前面没有东西

第二部分正好合适,所以就给你了第二部分。

同理,咱们把这个字符串扩展一下,添加dd123

python 复制代码
import re

a = "aa123bb123cc123dd123"  # 字符串添加了dd123
b = re.findall(r"([a-z]+123){2}", a)   # 当有一个组,有后面的{}
print(b)

输出:['bb123', 'dd123']

总结:有组的情况下进行二次筛选,输出符合的内容。

在python里,这个花括号"{}",只能表示规则的次数,不能复制括号"()"的次数。

📘 4.3 有多个组的情况下

python 复制代码
import re

b = re.findall(r'(\w+)=(\d+)', 'set width=20 and height=10')   # 当有多个组
print(b)

输出:[('width', '20'), ('height', '10')]

📚5.总结:

总结成白话文就是:

1.在没有括号"()"的情况下,全部匹配到了,全部给你!=》"整个模式匹配的字符串列表"。

2.在有一个括号"()"的情况下,虽然全部匹配到了,但要根据匹配规则给你其中的一部分!=》"组匹配的字符串列表"

3.在有多个括号"()"的情况下,虽然全部匹配到了,要根据匹配规则给你其中的一些!这一些是以元组列表返回。 =》"这些组匹配的字符串元组列表"

总结成一句就是:

当没有括号时,全部返给你,当有括号时,根据括号进行二次筛选,返给你对应的值,这里的括号是二次筛选的意思。

在python里,这个括号,有二次筛选、返回、提取的意思。

在python里,这个花括号"{}",只能表示规则的次数,不能复制括号"()"的次数。

📚6.用findall想得到aa123bb123怎么写?

📘6.1方法1,没有组的写法

python 复制代码
import re

a = "aa123bb123cc123"
b = re.findall(r"[a-z]+123[a-z]+123", a)   # 这里没有组,没有()
print(b) 

输出

📘6.2方法2,有组的写法

python 复制代码
import re

a = "aa123bb123cc123"
b = re.findall(r"([a-z]+123[a-z]+123)", a)   # 这里没有组,没有()
print(b)

输出

到此这篇文章就介绍到这了,更多精彩内容请关注本人以前的文章或继续浏览下面的文章,创作不易,如果能帮助到大家,希望大家多多支持宝码香车~💕,若转载本文,一定注明本文链接。


更多专栏订阅推荐:

👍 html+css+js 绚丽效果

💕 vue

✈️ Electron

⭐️ js

📝 字符串

✍️ 时间对象(Date())操作

相关推荐
jzlhll12324 分钟前
通过gradle发布aar或jar携带sources-jar到maven nexus
python·maven·jar
湫ccc27 分钟前
《Opencv》信用卡信息识别项目
人工智能·python·opencv·计算机视觉
赵谨言39 分钟前
Python 的医疗问句中的实体识别算法的研究(Flask)
经验分享·python·毕业设计
风_流沙41 分钟前
python 对MySQL操作封装工具类
开发语言·python·mysql
CM莫问1 小时前
python实战(十三)——基于Bert+HDBSCAN的微博热搜数据挖掘
人工智能·python·深度学习·语言模型·数据分析·文本挖掘·主题挖掘
B站计算机毕业设计超人1 小时前
计算机毕业设计hadoop+spark+hive新能源汽车推荐系统 汽车数据分析可视化大屏 新能源汽车推荐系统 汽车爬虫 汽车大数据 机器学习
大数据·hive·hadoop·python·深度学习·spark·课程设计
奶香臭豆腐1 小时前
PyCharm简单调试
python·pycharm
天弈初心2 小时前
python:利用神经网络技术确定大量离散点中纵坐标可信度的最高集中区间
开发语言·python·神经网络
Serendipity_Carl2 小时前
爬虫基础之爬取某基金网站+数据分析
爬虫·python·pycharm·数据分析·数据可视化
dundunmm2 小时前
【数据挖掘】深度高斯过程
python·深度学习·机器学习·数据挖掘·高斯过程·深度高斯过程