前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕
目录
- 正则表达式{}和(),pyhton里的正则函数findall解析
-
- [📚0. 匹配到的结果就是aa123bb123,但返回给你的是bb123,详细过程如下](#📚0. 匹配到的结果就是aa123bb123,但返回给你的是bb123,详细过程如下)
- 📚1.科普在前面的基本知识,但是有必要了解一下:
- 📚2.正则匹配到的结果如下。(正则匹配到的结果就是aa123bb123)
- [📚3.现在回到这个问答题,print(b) 那为什么,返回的结果是["bb123"]而不是["aa123bb123"]?](#📚3.现在回到这个问答题,print(b) 那为什么,返回的结果是["bb123"]而不是["aa123bb123"]?)
- [📚4. 下面对findall的3种情况进行分析:](#📚4. 下面对findall的3种情况进行分析:)
-
- [📘4.1 没有组的情况下](#📘4.1 没有组的情况下)
- [📘4.2 有一个组的情况下](#📘4.2 有一个组的情况下)
-
- [📖 4.2 .1 当有一个组,没有后面的{}](#📖 4.2 .1 当有一个组,没有后面的{})
- [📖 4.2 .2 当有一个组,有后面的{},并且是2,为例子。](#📖 4.2 .2 当有一个组,有后面的{},并且是2,为例子。)
- [📘 4.3 有多个组的情况下](#📘 4.3 有多个组的情况下)
- 📚5.总结:
- 📚6.用findall想得到aa123bb123怎么写?
📚📗📕📘📖🕮💡📝🗂️✍️🛠️💻🚀🎉🏗️🌐🖼️🔗📊👉🔖⚠️🌟🔐⬇️·正文开始
⬇️·🎥😊🎓📩😺🌈🤝🤖📜📋🔍✅🧰❓📄📢📈 🙋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的结果取决于模式中捕获组
的数量,如果没有组
,则返回与整个模式匹配的字符串列表
。如果只有一个组
,则返回与组匹配的字符串列表
。如果存在多个组
,则返回与这些组匹配的字符串元组列表
。非捕获组不会影响结果的形式。
结果取决于模式中捕获组的数量,解析如下:
- 没有组的情况下,返回与整个模式匹配的字符串列表。
- 有一个组的情况下,返回与组匹配的字符串列表。
- 有多个组的情况下,返回与这些组匹配的字符串元组列表。
文档地址: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)
输出
到此这篇文章就介绍到这了,更多精彩内容请关注本人以前的文章或继续浏览下面的文章,创作不易,如果能帮助到大家,希望大家多多支持宝码香车~💕,若转载本文,一定注明本文链接。
更多专栏订阅推荐:
💕 vue
✈️ Electron
⭐️ js
📝 字符串