关于Python正则表达式 findall函数问题详解

作者:wdc 时间:2022-10-24 22:18:43 

在写正则表达式的时候总会遇到不少的问题, 特别是在表达式有多个元组的时候。下面看下re模块下的findall()函数和多个表达式元组相遇的时候会出现什么样的坑。

代码如下:


import re
str="a b c d"
regex0=re.compile("((\w+)\s+\w+)")
print(regex0.findall(str))
regex1=re.compile("(\w+)\s+\w+")
print(regex1.findall(str))
regex2=re.compile("\w+\s+\w+")
print(regex2.findall(str))

结果:


[('a b', 'a'), ('c d', 'c')]
['a', 'c']
['a b', 'c d']

可能结果有点意外,下面解释一下

第一个正则表达式中是带有2个括号的,我们可以看到其输出是一个list 中包含2个 tuple

第二个正则表达式中带有1个括号,其输出的内容就是括号匹配到的内容,而不是整个表达式所匹配到的结果。

第三个正则表达式中不带有括号,其输出的内容就是整个表达式所匹配到的内容。

结论:findall()返回的是括号所匹配到的结果(如regex1),多个括号就会返回多个括号分别匹配到的结果(如regex),如果没有括号就返回就返回整条语句所匹配到的结果(如regex2)。所以在提取数据的时候就需要注意这个坑。

实际上是由其并不是python特有的,这是 正则 所特有的 , 任何一门高级语言使用正则都满足这个特点:有括号时只能匹配到括号中的内容,没有括号【相当于在最外层增加了一个括号】。在正则里面 “()” 代表的是分组的意思,一个括号代表一个分组,你只能匹配到"()"中的内容

标签:python,正则,findall
0
投稿

猜你喜欢

  • js操作浏览器的参数方法

    2024-04-18 10:00:04
  • Python学习之名字,作用域,名字空间(下)

    2021-04-28 05:45:20
  • Pytorch 抽取vgg各层并进行定制化处理的方法

    2023-01-28 16:30:15
  • Jupyter Notebook读入csv文件时出错的解决方案

    2021-09-15 18:13:48
  • 如何对MySQL数据库日志文件进行维护

    2009-02-04 13:23:00
  • 通过Python把学姐照片做成拼图游戏

    2022-03-24 17:21:01
  • MySQL之复杂查询的实现

    2024-01-23 00:32:43
  • 详情解析TCP与UDP传输协议

    2024-01-02 05:28:57
  • SQL Server中使用DTS设计器进行数据转移

    2009-01-08 16:15:00
  • python TKinter弹出式菜单的实例方法

    2023-03-25 05:59:54
  • Python库skimage绘制二值图像代码实例

    2023-06-12 15:05:33
  • SQL Server 2005 还原数据库错误解决方法

    2024-01-14 05:45:43
  • Webpack 实现 Node.js 代码热替换

    2024-05-13 10:04:14
  • python并发编程多进程 互斥锁原理解析

    2023-04-07 04:06:34
  • Python列表和集合的效率大比拼

    2021-09-04 14:10:16
  • 微信小程序实现人脸识别对比

    2024-04-29 13:22:13
  • Explain命令在优化查询中的实际应用

    2024-01-20 03:54:13
  • python3 os进行嵌套操作的实例讲解

    2022-11-01 09:49:35
  • vue3中7种路由守卫的使用大全举例

    2024-05-29 22:43:52
  • python用moviepy对视频进行简单的处理

    2023-08-03 07:02:15
  • asp之家 网络编程 m.aspxhome.com