python re模块findall()详解

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

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

import re

string="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)。所以在提取数据的时候就需要注意这个坑。

时间: 2024-10-12 10:47:14

python re模块findall()详解的相关文章

python之模块datetime详解

# -*- coding: utf-8 -*- #python 27 #xiaodeng #python之模块datetime详解 import datetime #data=datetime.date(2015,11,9)#表示日期的类 #data=datetime.time(hour[,minute[,second[,microsecond[,tzinfo]]]])#表示时间的类,从小时时间开始为参数 #data=datetime.datetime(year,month,day[,hour[

Python之正则re模块 --- findall()详解

1. findall() 函数的2种表示形式 1 import re 2 kk = re.compile(r'\d+') 3 kk.findall('one1two2three3four4') 4 #[1,2,3,4] 5 6 #注意此处findall()的用法,可传两个参数; 7 kk = re.compile(r'\d+') 8 re.findall(kk,"one123") 9 #[1,2,3] 2. 正则表达式可能遇到的坑  --- 正则表达式中的括号() 1. 当正则表达式中

python——pickle模块的详解

pickle模块详解 该pickle模块实现了用于序列化和反序列化Python对象结构的二进制协议. “Pickling”是将Python对象层次结构转换为字节流的过程, “unpickling”是反向操作,从而将字节流(来自二进制文件或类似字节的对象)转换回对象层次结构.pickle模块对于错误或恶意构造的数据是不安全的. pickle协议和JSON(JavaScript Object Notation)的区别 : 1. JSON是一种文本序列化格式(它输出unicode文本,虽然大部分时间它

python子进程模块subprocess详解与应用实例 之三

二.应用实例解析 2.1 subprocess模块的使用 1. subprocess.call >>> subprocess.call(["ls", "-l"])  0  >>> subprocess.call("exit 1", shell=True)  1 2. 调用系统中cmd命令,显示命令执行的结果: x=subprocess.check_output(["echo", "

python datetime模块参数详解

Python提供了多个内置模块用于操作日期时间,像calendar,time,datetime.time模块,它提供 的接口与C标准库time.h基本一致.相比于time模块,datetime模块的接口则更直观.更容易调用. datetime模块定义了两个常量:datetime.MINYEAR和datetime.MAXYEAR,分别表示datetime所能表示的最 小.最大年份.其中,MINYEAR = 1,MAXYEAR = 9999. datetime模块定义了下面这几个类: datetim

python urllib模块使用详解

简介:urllib2是python的一个获取url(Uniform Resource Locators,统一资源定址器)的模块.它用urlopen函数的形式提供了一个非常简洁的接口.这使得用各种各样的协议获取url成为可能.它同时 也提供了一个稍微复杂的接口来处理常见的状况-如基本的认证,cookies,代理,等等.这些都是由叫做opener和handler的对象来处理的. 以下是获取url最简单的方式: import urllib2response = urllib2.urlopen('htt

python子进程模块subprocess详解与应用实例 之一

subprocess--子进程管理器? 一.subprocess 模块简介 subprocess最早是在2.4版本中引入的. subprocess模块用来生成子进程,并可以通过管道连接它们的输入/输出/错误,以及获得它们的返回值. 它用来代替多个旧模块和函数: os.system os.spawn* os.popen* popen2.* commands.* 关于这个模块可以取代的旧函数可以参见 subprocess-replacements 一节. POSIX用户(Linux, BSD, et

python子进程模块subprocess详解与应用实例 之二

1.2. Popen 对象 Popen类的实例有下列方法: 1. Popen.poll() 检查子进程是否已经结束,设置并返回返回码值. 2. Popen.wait() 等待子进程结束,设置并返回返回码值.WARNING: 当使用 stdout=PIPE 或 stderr=PIPE 并且子进程生成了足够多的输出信息到管道,以至于管道阻塞,将会造成死锁.         使用 communicate()可以避免这种情况. 3. Popen.communicate(input=None) 和子进程进

python子进程模块subprocess详解

属性 1.Popen.poll():用于检查子进程是否已经结束.设置并返回returncode属性. 2.Popen.wait():等待子进程结束.设置并返回returncode属性. 3.Popen.communicate(input=None):与子进程进行交互.向stdin发送数据,或从stdout和stderr中读取数据.可选参数input指定发送到子进程的参数.Communicate()返回一个元组:(stdoutdata, stderrdata).注意:如果希望通过进程的stdin向