python re的findall和finditer的区别详解_python

来源:脚本之家  责任编辑:小易  

findall是返回所匹2113配的字符串,返回的是一个列表,并5261不返回match对象,match对象才有4102start,span方法import rematchs=re.finditer(r'\w+',"This is a test")for match in matchs: print( match.start(),match.span())想找到所有匹配1653字符串的索引用finditer吧,findall返回的是2113匹配内容或者分组的5261列表,没有位置信息。你可以不用findall,用这个4102pattern.finditer(string[, pos[, endpos]]) | re.finditer(pattern, string[, flags])这个函数1653返回Match对象的迭代器你可以去看文档,也可以看下面这个链接http://blog.csdn.net/zm2714/article/details/8016323www.zgxue.com防采集请勿采集本网。

python正则模块re中findall和finditer两者相似,但却有很大区别。 

Python编程中对字符串进行搜索查找,并返回字符位置,案例代码如下: # multiple searches of a string for a substring # using s.find(sub[ ,start[, end]]) #以下面test这段文本为例text = 'MSKSASPKEPEQLRKLFIGGLSFETTDESLRSAHFESSSYGSAGRRF

两者都可以获取所有的匹配结果,这和search方法有着很大的区别,同时不同的是一个返回list,一个返回一个MatchObject类型的iterator

import res='AABBAACCAADDAAEEAAFF'for i in re.finditer('AA',s): print i.group(),i.span()

假设我们有这样的数据:其中数字代表电话号,xx代表邮箱类型

Python除了 str 对象自带的一些方法外,re文字处理能力也很强大。 正则表达式元字符说明 [python正则表达式] 导入和查看正则表达式模块 import re 查看正则表达式模块方法 dir(re) [‘DEBUG’, ‘DOTALL’, ‘I’, ‘IGNORECASE’, ‘L’, ‘LOCALE’, ‘M’,

首先,「匹配除2012这个字符串以外的任意字符?」语义不明,你是想将其从原字符串中删除还是要匹配2012以外的年份? 姑且认为你的意思是后者,也即在一个特定模式里排除某些匹配的实例。 方法一、先预处理,将要匹配的字符串里的2012替换成不可能

content = '''email:12345678@163.comemail:2345678@163.comemail:345678@163.com'''

import re matchs=re.finditer(r'(.*?)',htmltext,re.S) for match in matchs: print(match.group(1)) 匹配时指定re.S可以让点匹配所有字符,包括换行符

需求:(正则没有分组)提取所有的邮箱信息

首先,「匹配除2012这个字符串以外的任意字符?」语义不明,你是想将其从原字符串中删除还是要匹配2012以外的年份? 姑且认为你的意思是后者,也即在一个特定模式里排除某些匹配的实例。 方法一、先预处理,将要匹配的字符串里的2012替换成不可能

result_finditer = re.finditer(r"\d+@\w+.com", content)#由于返回的为MatchObject的iterator,所以我们需要迭代并通过MatchObject的方法输出for i in result_finditer : print i.group()result_findall = re.findall(r"\d+@\w+.com", content)#返回一个[] 直接输出or或者循环输出print result_findallfor i in result_findall : print i

需求:(正则有分组)提取出来所有的电话号码和邮箱类型

首先,「匹配除2012这个字符串以外的任意字符?」语义不明,你是想将其从原字符串中删除还是要匹配2012以外的年份? 姑且认为你的意思是后者,也即在一个特定模式里排除某些匹配的实例。 方法一、先预处理,将要匹配的字符串里的2012替换成不可能

result_finditer = re.finditer(r"(\d+)@(\w+).com", content)#正则有两个分组,我们需要分别获取分区,分组从0开始,group方法不传递索引默认为0,代表了整个正则的匹配结果for i in result_finditer : phone_no = i.group(1) email_type = i.group(2)result_findall = re.findall(r"(\d+)@(\w+).com", content)#此时返回的虽然为[],但不是简单的[],而是一个tuple类型的list #如:[('12345678', '163'), ('2345678', '163'), ('345678', '163')]for i in result_findall : phone_no = i[0] email_type = i[1]

命名分组和非命名分组的情况是一样的。

findall注意点:

1.当正则没有分组是返回的就是正则的匹配

首先,「匹配除2012这个字符串以外的任意字符?」语义不明,你是想将其从原字符串中删除还是要匹配2012以外的年份? 姑且认为你的意思是后者,也即在一个特定模式里排除某些匹配的实例。 方法一、先预处理,将要匹配的字符串里的2012替换成不可能

re.findall(r"\d+@\w+.com", content)['2345678@163.com', '2345678@163.com', '345678@163.com']

2.有一个分组返回的是分组的匹配而不是整个正则的匹配

首先,「匹配除2012这个字符串以外的任意字符?」语义不明,你是想将其从原字符串中删除还是要匹配2012以外的年份? 姑且认为你的意思是后者,也即在一个特定模式里排除某些匹配的实例。 方法一、先预处理,将要匹配的字符串里的2012替换成不可能

re.findall(r"(\d+)@\w+.com", content)['2345678', '2345678', '345678']

3.多个分组时将分组装到tuple中 返回

首先,「匹配除2012这个字符串以外的任意字符?」语义不明,你是想将其从原字符串中删除还是要匹配2012以外的年份? 姑且认为你的意思是后者,也即在一个特定模式里排除某些匹配的实例。 方法一、先预处理,将要匹配的字符串里的2012替换成不可能

re.findall(r"(\d+)@(\w+).com", content)[('2345678', '163'), ('2345678', '163'), ('345678', '163')]

因此假如我们需要拿到整个正则和每个分组的匹配,使用findall我们需要将整个正则作为一个分组

首先,「匹配除2012这个字符串以外的任意字符?」语义不明,你是想将其从原字符串中删除还是要匹配2012以外的年份? 姑且认为你的意思是后者,也即在一个特定模式里排除某些匹配的实例。 方法一、先预处理,将要匹配的字符串里的2012替换成不可能

re.findall(r"((\d+)@(\w+).com)", content)[('2345678@163.com', '2345678', '163'), ('2345678@163.com', '2345678', '163'), ('345678@163.com', '345678', '163')]

而使用finditer我们无需手动将整个正则用()括起来group()代表整个正则的匹配

实际中我们根据我们的需求选择方法既可。

到此这篇关于python re的findall和finditer的区别详解的文章就介绍到这了,更多相关python re的findall和finditer内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网! 您可能感兴趣的文章:Python3正则匹配re.split,re.finditer及re.findall函数用法详解

(1)re.match()函数re.match 尝试从字2113符串的开始匹配5261一个模式4102。函数语法:1653re.match(pattern, string, flags=0)函数参数说明:参数描述pattern    匹配的正则表达式    string    要匹配的字符串。    flags    标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。    匹配成功re.match方法返回一个匹配的对象,否则返回None。我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。匹配对象方法描述group(num=0)    匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。    groups()    返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。    (2)re.research()函数re.search匹配李没裤整个字符串,直到找到一个匹配。函数语法:re.search(pattern, string, flags=0)函数参数说明:参数描述pattern    匹配的正则表达式    string    要匹配的字符串。    flags    标志位,用于控制正则表达式的匹配察旁方式,如:是否区分大小写,多行匹配等等。    匹配成功re.search方法方法返回一个匹配的对象,否则返回None。我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。匹配对象方法描述group(num=0)    匹配的整个表达式的字哪简符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。    groups()    返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。    (3)实例我这里采用re.search()函数解决的问题。测试数据集为购物网站用户评论实例代码:[python] view plain copy# -*-coding:utf-8 -*-  import sys  import re  reload(sys)  text = open('JD_DFB_comments.txt')  line = text.readline()  #i = 0   while line:  #i = i+1  #re.search匹配整个字符串,直到找到一个匹配。  n1 = re.search(r'(要(是|能)(.*)就(更|好|再|直观|完美|太)(.*)了)',line)  n2 = re.search(r'(如果)(.*)就(更|好|再|直观|完美|太)(.*)了',line)  #打开将要写入的数据  data = open('aa.txt','a')  if n1:  #print line  data.write(line)      #写入匹配到的数据  #print i              记录匹配结果所在的行数  #print n1.group()     #等于print line  print n1.group(3)     #打出第三个括号里的内容  if n2:  #print n2.group()  print n2.group(2)          line = text.readline()  text.close()  阅读更多个人分类: Python语言想对作者说点什么? 我来说一句Python中re的match、search、findall、finditer区别,regStr = r'*(?:(aaa|bbb))*'内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • 用python解决计数原理问题的方法
  • python二叉搜索树与双向链表转换算法示例
  • python3爬虫关于识别检验滑动验证码的实例
  • 分享8点超级有用的python编程建议(推荐)
  • tensorflow实现从txt文件读取数据
  • python批量生成特定尺寸图片及图画任意文字的实例
  • python错误:attributeerror: ''module'' object has no attribu
  • windows下python3.7安装教程
  • 对python3中bytes和hexstr之间的转换详解
  • python实现梯度法 python最速下降法
  • 如何用python正则?
  • 问一下python正则表达式find函数的问题!
  • python中的re模块是自带的吗
  • python 正则表达式,怎样匹配以某个字符串开头,以...
  • python中怎么返回指定查找字符的位置
  • python re.search请问下怎么能得到匹配上的字符位...
  • python3怎么导入re模块
  • python re 正则匹配某类字符前的所有字符(不包括...
  • Python下正则表达式匹配包括换行符,语句怎么写?...
  • python 常用的系统函数有哪些
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全vbsdos/bathtahtcpythonperl游戏相关vba远程脚本coldfusionruby专题autoitseraphzonepowershelllinux shellluagolangerlang其它首页python3正则匹配re.split,re.finditer及re.findall函数用法详解用python解决计数原理问题的方法python二叉搜索树与双向链表转换算法示例python3爬虫关于识别检验滑动验证码的实例分享8点超级有用的python编程建议(推荐)tensorflow实现从txt文件读取数据python批量生成特定尺寸图片及图画任意文字的实例python错误:attributeerror: ""module"" object has no attribuwindows下python3.7安装教程对python3中bytes和hexstr之间的转换详解python实现梯度法 python最速下降法python入门教程 超详细1小时学会pycharm 2020最新永久激活码(附python 列表(list)操作方法详解python 元组(tuple)操作详解python 字典(dictionary)操作详解pycharm 使用心得(一)安装和首python strip()函数 介绍python 中文乱码问题深入分析python中使用xlrd、xlwt操作excepycharm 2020年最新激活码(亲测django创建超级用户过程解析python学习笔记之列表(list)与元组(tuplepython多进程原理与用法分析python基于checksum计算文件是否相同的方python 3 判断2个字典相同python判断字符串编码的简单实现方法(使用django {{ media_url }}无法显示图片的解python能做什么python如何使用redis构建分布式锁python读取文件内容为字符串的方法(多种方
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved