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

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

共同探索软件研发!敬请关注【宝码香车】
关注描述

csdngif标识

目录

  • 正则表达式{}和(),pyhton里的正则函数findall解析
    • 📚0. 匹配到的结果就是aa123bb123,但返回给你的是bb123,详细过程如下
    • 📚1.科普在前面的基本知识,但是有必要了解一下:
    • 📚2.正则匹配到的结果如下。(正则匹配到的结果就是aa123bb123)
      • 📘测试1:
      • 📘测试2:
    • 📚3.现在回到这个问答题,print(b) 那为什么,返回的结果是["bb123"]而不是["aa123bb123"]?
    • 📚4. 下面对findall的3种情况进行分析:
      • 📘4.1 没有组的情况下
      • 📘4.2 有一个组的情况下
        • 📖 4.2 .1 当有一个组,没有后面的{}
        • 📖 4.2 .2 当有一个组,有后面的{},并且是2,为例子。
      • 📘 4.3 有多个组的情况下
    • 📚5.总结:
    • 📚6.用findall想得到aa123bb123怎么写?
      • 📘6.1方法1,没有组的写法
      • 📘6.2方法2,有组的写法


📚📗📕📘📖🕮💡📝🗂️✍️🛠️💻🚀🎉🏗️🌐🖼️🔗📊👉🔖⚠️🌟🔐⬇️·正文开始⬇️·🎥😊🎓📩😺🌈🤝🤖📜📋🔍✅🧰❓📄📢📈 🙋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的一部分。而是一套独立于编程语言,用于处理复杂文本信息的强大的高级文本操作工具。正则表达式拥有自己独特的规则语法以及一个独立的正则处理引擎,我们根据正则语法编写好规则(模式)以后,引擎不仅能够根据规则进行模糊文本查找,还可以进行模糊分割,替换等复杂的文本操作,能让开发者随心所欲地处理文本信息。
正则表达式(Regular Expression,简称Regex或Reg Exp)

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

根据正则表达式的匹配规则:
字符串为aa123bb123cc123
匹配规则为([a-z]+123){2}
匹配到的结果就是 aa123bb123

📘测试1:

如图,测试结果:

正则表达式测试结果

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

📘测试2:

另一个测试结果:

正则表达式测试结果2

测试地址:https://tool.oschina.net/regex
匹配结果
匹配结果2

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

因为python里的findall
python中的findall

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

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

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

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

python里的findall定义及解析

返回结果取决于组的数量

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

python返回结果受findall的组影响

📚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里,把这个括号赋予了新的意义。叫组。返回结果受组的影响。

findall在没有组的情况下的输出

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

import re

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


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

📘4.2 有一个组的情况下

📖 4.2 .1 当有一个组,没有后面的{}
import re

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

输出 [‘aa123’, ‘bb123’, ‘cc123’]

 当有一个组,没有后面的{}

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

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

输出 [‘bb123’]

 当有一个组,有后面的{},并且是2,为例子。

你有组,就只能从这个匹配结果中,返回中取出一部分给你
取出哪一部分呢,第一部分不符合因为你是{2},第一部分前面没有东西
第二部分正好合适,所以就给你了第二部分。
同理,咱们把这个字符串扩展一下,添加dd123

import re

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

输出:[‘bb123’, ‘dd123’]

python里的findall在有一个组的情况下的输出
总结:有组的情况下进行二次筛选,输出符合的内容。
在python里,这个花括号“{}”,只能表示规则的次数,不能复制括号"()"的次数。

📘 4.3 有多个组的情况下

import re

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

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

在这里插入图片描述

📚5.总结:

pyton中括号的意义

总结成白话文就是:
1.在没有括号"()“的情况下,全部匹配到了,全部给你!=》“整个模式匹配的字符串列表”。
2.在有一个括号”()“的情况下,虽然全部匹配到了,但要根据匹配规则给你其中的一部分!=》“组匹配的字符串列表”
3.在有多个括号”()"的情况下,虽然全部匹配到了,要根据匹配规则给你其中的一些!这一些是以元组列表返回。 =》“这些组匹配的字符串元组列表”

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

在python里,这个括号,有二次筛选、返回、提取的意思。
在python里,这个花括号“{}”,只能表示规则的次数,不能复制括号"()"的次数。

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

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

import re

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

输出

在这里插入图片描述

📘6.2方法2,有组的写法

import re

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

输出

有组的写法

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


整理不易,点赞关注宝码香车

更多专栏订阅推荐:
👍 html+css+js 绚丽效果
💕 vue
✈️ Electron
⭐️ js
📝 字符串
✍️ 时间对象(Date())操作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/949304.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Angular由一个bug说起之十三:Cross Origin

跨域 想要了解跨域,首要要了解源 什么是源,源等于协议加域名加端口号 只有这三个都相同,才是同源,反之则是非同源。 比如下面这四个里,只有第4个是同源 而浏览器给服务器发送请求时,他们的源一样&#xff0…

x86霸权难动摇!

快科技1月6日消息,根据市场研究机构ABI Research的最新报告,尽管2025年被视为Arm PC市场扩张的关键一年,但搭载Arm架构处理器的PC预计仅占PC总出货量的13%。 ABI Research的分析师指出,尽管高通最新的PC处理器在性能和AI功能上有…

STM32的LED点亮教程:使用HAL库与Proteus仿真

学习目标:掌握使用STM32 HAL库点亮LED灯,并通过Proteus进行仿真验证! 建立HAL库标准工程 1.新建工程文件夹 新建工程文件夹建议路径尽量为中文。建立文件夹的目的为了更好分类去管理项目工程中需要的各类工程文件。 首先需要在某个位置建立工…

mongodb==安装prisma连接

官网下载mongodb,解压安装 Download MongoDB Community Server | MongoDB 修改bin/mongod.cfg # mongod.conf# for documentation of all options, see: # http://docs.mongodb.org/manual/reference/configuration-options/# Where and how to store data. storage:dbPat…

前端工程化之手搓webpack5 --【elpis全栈项目】

前端工程化之手搓webpack5 --【elpis全栈项目】 导读 基本流程:输入 – 编译 – 输出 #mermaid-svg-V8Gi7RFNikCuEhax {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-V8Gi7RFNikCuEhax .error-icon{fil…

云备份项目--服务端编写

文章目录 7. 数据管理模块7.1 如何设计7.2 完整的类 8. 热点管理8.1 如何设计8.2 完整的类 9. 业务处理模块9.1 如何设计9.2 完整的类9.3 测试9.3.1 测试展示功能 完整的代码–gitee链接 7. 数据管理模块 TODO: 读写锁?普通锁? 7.1 如何设计 需要管理…

深入了解 ES6 Map:用法与实践

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

大润发易主,被阿里割肉卖了

文丨白念云 零售行业2025年伊始便迎来一则重磅消息:大润发被卖了。 1月1日晚,阿里巴巴集团发布公告,宣布子公司及NewRetail与德弘资本达成交易,以最高约131.38亿港元出售所持高鑫零售(大润发母公司)全部股…

VulnHub—potato-suncs

使用命令扫描靶机ip arp-scan -l 尝试访问一下ip 发现一个大土豆没什么用 尝试扫描一下子域名 没有发现什么有用的信息 尝试扫描端口 namp -A 192.168.19.137 -p- 尝试访问一下端口,发现都访问不进去 查看源代码发现了网页的标题 potato,就想着爆破一下密码 hydr…

docker学习记录:commit,制作自己的镜像

1.清除所有 ktkt-SYS-4028GR-TR2:~$ sudo docker rm -f $(sudo docker ps -aq)2.再操作一次tomcat,修改好,再打成一外镜像 ktkt-SYS-4028GR-TR2:~$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE tomcat 9.0 3…

macos安装java8

下载 dmg方式安装 安装 双击pkg运行 输入java -version验证 配置环境变量 cd ~ ls -a输入 ls -a后查看是否已经存在.bash_profile文件,如果已经存在就不需要创建,如果不存在,继续执行下方命令创建文件 touch .bash_profile /usr/l…

【每日学点鸿蒙知识】自定义键盘光标、Cavas绘制、XComponent触发键盘抬起等

【每日学点鸿蒙知识】24.08.25 【每日学点鸿蒙知识】自定义键盘光标、Cavas绘制、XComponent触发键盘抬起等 1、基于自定义键盘如何设置光标位置? 可以参考如下代码: class MyKeyboardController {public onInputChanged?: (value: string) > vo…

在Mysql环境下对数据进行增删改查

一、插入数据: insert into 表名 [(字段名)] values (字段对应的值1,字段对应的值2,…)[,(字段对应的值1,字段对应的值2,…)]; insert into students (id,name,age,height,gender,cls_id,is_delete) values (0,小明,18,180.00,2,1,0)在学生表中插入“小明”数据的…

Web网页制作之JavaScript的应用

---------------📡🔍K学啦 更多学习资料📕 免费获取--------------- 实现的功能:1.通过登录界面跳转至主页面,用户名统一为“admin”,密码统一为“admin123”,密码可显示或隐藏,输入…

Markdown编辑器——Typora(Picgo+Github图床)

Markdown编辑器——Typora(PicgoGithub图床) 文章目录 Markdown编辑器——Typora(PicgoGithub图床)安装Typora安装PicGoPicGo软件下载PicGo的npm版本下载 GitHub图床配置PicGo配置PicGo的软件配置PicGo的npm版本信息配置 配置Typo…

Unity 3D游戏开发从入门进阶到高级

本文精心整理了Unity3D游戏开发相关的学习资料,涵盖入门、进阶、性能优化、面试和书籍等多个维度,旨在为Unity开发者提供全方位、高含金量的学习指南.欢迎收藏。 学习社区 Unity3D开发者 这是一个专注于Unity引擎的开发者社区,汇聚了众多Un…

Python 21:Debug

1. Debug的作用 当程序的预期结果和实际结果不一致时,可以用Debug模式进行调试来定位问题的位置。 2. Debug使用 1)设置断点 点击行号,出现”断点“ 2)执行Debug 点击Debug 或者右键,点击debug进入debug模式 3.Debu…

(CICD)自动化构建打包、部署(Jenkins + maven+ gitlab+tomcat)

一、平滑发布与灰度发布 **什么叫平滑:**在发布的过程中不影响用户的使用,系统不会因发布而暂停对外服务,不会造成用户短暂性无法访问; **什么叫灰度:**发布后让部分用户使用新版本,其它用户使用旧版本&am…

强化学习入门谈

之前我们见识到很多机器学习大展手脚的任务场景了,但是机器学习依旧有很多软肋。 回忆一下,我们之前做的机器学习(深度学习)策略基本都是类似于"supervised learning"的方法,比如你想用CNN实现一个classifi…

colnames看似简单,却能优化数据处理流程

引言 在数据处理和分析中,变量名称是至关重要的,它们决定了数据的可读性和操作的简便性。在R语言中,colnames 函数以其简单的语法设计,提供了高效管理数据框列名的能力,尤其是在复杂的爬虫任务中显得尤为重要。本篇文…