博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python re模块findall()详解
阅读量:6265 次
发布时间:2019-06-22

本文共 1039 字,大约阅读时间需要 3 分钟。

今天写代码,在写到郑泽的时候遇到了一个坑,这个坑是re模块下的findall()函数。

下面我将结合代码,记录一下

import restring="abcdefg  acbdgef  abcdgfe  cadbgfe"#带括号与不带括号的区别 #不带括号 regex=re.compile("((\w+)\s+\w+)") print(regex.findall(string)) #输出:[('abcdefg acbdgef', 'abcdefg'), ('abcdgfe cadbgfe', 'abcdgfe')] regex1=re.compile("(\w+)\s+\w+") print(regex1.findall(string)) #输出:['abcdefg', 'abcdgfe'] regex2=re.compile("\w+\s+\w+") print(regex2.findall(string)) #输出:['abcdefg acbdgef', 'abcdgfe cadbgfe']

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

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

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

 

无括号:字母或数字或下划线+空白+字母或数字或下划线+,所以分成了俩组

一个括号:在无括号的基础上,匹配 字母或数字或下划线(后面是字母或数字或下划线+)
俩个括号:在无括号的基础上,先分俩组,再在里面括号基础上查到第二组内容,整体分组组成元组,放到列表中

 

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

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

转载于:https://www.cnblogs.com/fmgao-technology/p/9183937.html

你可能感兴趣的文章
网吧维护工具
查看>>
BOOT.INI文件参数
查看>>
Exchange-批量创建通讯组邮箱
查看>>
系统目录结构、ls命令、文件类型、alias命令
查看>>
win10 uwp 异步转同步
查看>>
简单CDN之智能DNS
查看>>
UPS工作模式简析
查看>>
词向量-LRWE模型
查看>>
Selenium打包成exe运行出错
查看>>
shell脚本之重定向、标准输入、输出、错误输出的使用
查看>>
如何从Google官网下载Chrome离线安装包
查看>>
JAR——CircleImageView
查看>>
Centos6.5下rsync文件同步安装及配置当中遇到的问题及解决方法
查看>>
空指针异常
查看>>
文件删除原理
查看>>
使用DBeaver连接hive
查看>>
sql中加序号
查看>>
ios的手势操作之UIGestureRecognizer浅析
查看>>
精度 Precision
查看>>
vsphere5.0环境中win2000虚机无法安装vmtools解决办法。
查看>>