首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

匹配长字符串时,finditer挂起

匹配长字符串时,finditer可能会挂起,这是因为finditer会在内存中存储所有匹配结果,当处理大量数据时,可能会导致内存不足,从而导致程序挂起。

为了解决这个问题,可以使用finditer的替代方案,即使用yield from语句,这样可以在处理大量数据时,逐个返回匹配结果,而不是一次性将所有结果存储在内存中。

以下是一个使用yield from语句的示例代码:

代码语言:python
代码运行次数:0
复制
import re

def finditer_generator(pattern, string):
    for match in re.finditer(pattern, string):
        yield match

pattern = r'\d+'
string = '1234567890' * 100000

for match in finditer_generator(pattern, string):
    print(match)

这个示例代码中,我们定义了一个名为finditer_generator的函数,它接受两个参数:pattern和string,并使用yield from语句返回所有匹配结果。在主程序中,我们使用for循环遍历所有匹配结果,并打印它们。

使用yield from语句可以避免内存不足的问题,并提高程序的性能。同时,它也是一种更加高效的方式来处理大量数据。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

(二十二) 初遇python甚是喜爱之re正则表达式学习

#print(match) #运行会匹配字符串中所有的位置 #因为“.”是正则表达式中的特殊字符 #一会具体解释 #正则表达式稍作修改: #反斜杠代表不做特殊处理 #匹配原始字符 pattern =...Ha因为它没有单词边界 #单词边界:匹配字符串,但不能在词的开头或者结尾 pattern = re.compile(r'\BHa') matches = pattern.finditer(text_to_search..., match='Start'> #匹配字符串结尾为end pattern = re.compile(r'end$') matches = pattern.finditer(sens) for match...\d\d\d\d #匹配数字三次任意字符,在匹配数字三次任意字符,最后匹配数字四次 #匹配字符串中的号码中间用中线和点连接的 不要*号连接的 #123-555-4321 #123.555.1234 #123...\w+)') #其中每个括号代表一个组 #可以使用match.group(index)获取每个组匹配到的值 #index为0的时候 代表整个字符串 #index从1开始 matches = pattern.finditer

49010
  • Python-re模块-正则表达式模块常用方法

    ,返回pattern对象: pat = re.compile('\d') m = pat.match('123') finditer() 在Python的re模块中,re.finditer()是非常有用的一个正则表达式匹配函数...re.finditer()的作用是在字符串中找到所有的匹配,并返回一个迭代器。...相比re.findall()和re.finditer()有以下区别: re.findall():返回一个匹配字符串的列表 re.finditer():返回一个匹配对象迭代器 示例: import re...主要优点是: 不需要先存储所有匹配,更save内存 可以逐个访问每个匹配 提供了匹配的位置信息 所以在需要定位每个匹配的位置,re.finditer()非常有用。...然后在获取匹配后,可以直接通过命名引用匹配的内容。 在替换字符串,也可以利用命名组引用,使代码更简洁清晰。 所以命名捕获组可以让正则匹配和处理更高效方便。 以上是re模块的常用函数

    27430

    Python正则表达式(下)

    ,返回形式为集合; findall方法适用于没有分组或者非捕获分组的场景; 案例01: 没有分组的场景 在字符串中获取1开头或者9开头的数字 import re str01 = "Use this...:cn|com)\b",str01)) (2)finditer( ) 返回string中所有与pattern相匹配match对象的迭代,finditer适用的场景为捕获分组的场景; 案例: 获取4个数字其中前两个数字是一样的...我们主要掌握忽略大小写和多行模式的修饰符的用法就行了,这些正则匹配修饰符主要写在findall(正则表达式,待匹配字符串,匹配修饰符) 1....()是从string字符串的开头开始匹配,search()只有string字符串中包含了pattern就可以匹配到。...常见方法: (1)group()获得一个或多个分组截获的字符串,编号0代表整个匹配的子串;不填写参数,返回group(0);没有截获字符串的组返回None; 案例: import re match_result

    1.4K10

    Python正则表达式(持续更新,各种字符串筛选,总有一款适合您当前的功能)

    【★★★★★】 4、re.finditer函数·多项匹配-推荐指数【★★★★】 5、re.sub函数·替换函数-推荐指数【★★★★】 二、正则表达式示例·总有一款适合你 1、正则表达式匹配HTML指定id...1、匹配短连接 2、匹配连接 3、各类网址url列表  4、网页中中文提取 总结: ---- 一、python【re】的用法 通用函数: 函数名 作用 span() 获取匹配字符串下标范围,返回元组...group() 返回匹配字符串结果,返回字符串。...4、re.finditer函数·多项匹配-推荐指数【★★★★】 在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。个人不太喜欢用迭代器,故而推荐指数四颗星。...in result_finditer: print(i.group()) 5、re.sub函数·替换函数-推荐指数【★★★★】 这个函数用的相对来说不是很多,一般正则梳理好的字符串就直接使用字符串的处理方法来搞定了

    65520

    Python re正则表达式

    还有,假设在字符串的開始或结尾就匹配,返回的list将会以空串開始或结尾,假设字符串不能匹配,将会返回整个字符串的list。...当repl是一个字符串,能够使用\id或\g、\g引用分组。但不能使用编号0。 当repl是一个方法。这种方法应当仅仅接受一个參数(Match对象)。...search(),finditer()函数返回的值。 属性: string: 匹配使用的文本。 re: 匹配使用的Pattern对象。 pos: 文本中正則表達式開始搜索的索引。...方法: group([group1, …]): 获得一个或多个分组截获的字符串。指定多个參数将以元组形式返回。...group1能够使用编号也能够使用别名;编号0代表整个匹配的子串;不填写參数,返回group(0)。没有截获字符串的组返回None;截获了多次的组返回最后一次截获的子串。

    32720

    25. Python 正则(2)

    从string的pos下标处起尝试匹配pattern; 如果pattern结束仍可匹配,则返回一个Match对象;若无法匹配,则将pos加1后重新尝试匹配; 直到pos=endpos仍无法匹配则返回...当repl是一个字符串,可以使用\id或\g、\g引用分组,但不能使用编号0。...当repl是一个方法,这个方法应当只接受一个参数(Match对象),并返回一个字符串用于替换(返回的字符串中不能再引用分组)。 count用于指定最多替换次数,不指定时全部替换。...4,groupdict只能显示有分组名的数据 group([group1, …]) 用法: 获得一个或多个分组截获的字符串;指定多个参数将以元组形式返回。...group1可以使用编号也可以使用别名;编号0代表整个匹配的子串;不填写参数,返回group(0);没有截获字符串的组返回None;截获了多次的组返回最后一次截获的子串。

    41510

    爱了爱了,扔了网上的正则调试工具后,我吧啦吧啦自己写了一个!(文末附源码以及工具下载)

    findall() findall方法匹配所有符合匹配规则的内容,返回的是一个列表,pattern为匹配规则(正则表达式), string为要匹配字符串, flags为修饰符,默认对于0,修饰符包含:...常用于大量构写相同的匹配规则使用。...,匹配匹配规则不相同的内容终止,只匹配一次,匹配成功返回一个对象;当开头匹配不符合匹配规则则返回None。...也就是说,字符串的开头不匹配就终止匹配字符串的开头匹配成功就继续匹配匹配不成功;参数同上。...,直接从字符串匹配匹配规则相匹配的第一个内容,也是只匹配一次;参数同上。

    50020

    Python 学习之正则表达式「下」

    print(s.split(" ")) print(re.split(r" +", s)) # 以一个或多个空格切割 finditer() 函数 # re.finditer() 函数,与 findall..., string, count, flags=0) 与 re.subn(…) repl 用来替换的字符串,string 目标字符串,count 最多替换次数 作用:在目标字符串中以正则表达式的规则匹配字符串...,再把他们替换成指定的字符串,可以指定替换的次数,如果不指定,替换所有的匹配字符串 区别:前者返回一个被替换的字符串,后者返回一个元组,元组的第一个元素为被替换的字符串,第二个元素为被替换的次数 s =...print(d.groups()) # ('010-8888888', '010', '8888888') 编译 compile(pattern, flags=0) 编译:当我们使用正则表达式,re...模块会做两件事: 1.编译正则表达式,如果正则表达式本身不合法,会报错 2.用编译后的正则表达式去匹配对象,如果编译成正则对象,简化了匹配过程 pat= r"^1(([3578]\d)|(47))\d

    23410

    Python 正则表达式

    因此,当你不指定 pos 和 endpos ,match 方法默认匹配字符串的头部。 当匹配成功,返回一个 Match 对象,如果没有匹配上,则返回 None。 看看例子。...Match 对象,其中: group([group1, …]) 方法用于获得一个或多个分组匹配字符串,当要获得整个匹配的子串,可直接使用 group() 或 group(0); start([group...当匹配成功,返回一个 Match 对象,如果没有匹配上,则返回 None。...方法 finditer 方法的行为跟 findall 的行为类似,也是搜索整个字符串,获得所有匹配的结果。...,也就是尽可能多的匹配,因此,在成功匹配到第一个 ,它还会向右尝试匹配,查看是否还有更长的可以成功匹配的子串。

    82760

    【珍藏版】长文详解python正则表达式

    7. re.finditer函数 功能:在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。...因此,当不指定 pos 和 endpos ,match 方法默认匹配字符串的头部。当匹配成功,返回一个 Match 对象,如果没有匹配上,则返回 None。 例子: ?...(2)Pattern对象:sub(repl, string[, count]) 当repl为字符串,可以用\id的形式引用分组,但不能使用编号0;当repl为函数,返回的字符串中不能再引用分组。...使用Pattern对象的match、search、findall、finditer等函数可以指定匹配字符串的起始位置。 2....三、贪恋匹配 正则表达式匹配默认的是贪恋匹配,也就是会尽可能多的匹配更多字符。如果想使用非贪恋匹配,可以在正则表达式中加上'?'。 下面,我们来看1个实例: ?

    83420

    热饭面试复习【python常见面试题 】24

    是充当任意一个字符 ^ 是字符串的开始 $ 是字符串的结尾 * 表达0次以上 + 表达1次以上 ?...\b 匹配单词边界 \nn 匹配已经保存的子组 \c 逐一匹配特殊字符c ,即取消它的特殊含义,按字面匹配 \A 匹配字符串的起始 \Z 匹配字符串的结束 方法: match() :从开始找...search():从任意位置找 group() :返回全部对象 groups():返回包含全部子组的元组 findall() :返回一个列表,非重复的 finditer() :返回迭代器,可重复 split...() :根据正则中的分隔符吧字符串分隔为一个列表,返回此列表,可设置最大分隔次数 sub(正则,新,旧,最大次数) :把所有符合正则的字符串替换成新的。...m.group() 6线程 守护线程:子线程名称.setDemo(True) .start() 线程开始执行 .run() 定义线程功能的函数 .join(timeout=None) 程序挂起

    17520

    python正则表达式与re模块-02

    注意: # ^ 与 & 会精准限制匹配的内容,两者中间写什么,待匹配字符串就必须是什么,多一个少一个都不行 , # 运用 | (“或”)的时候一定要把的写在前面,否则匹配到短的就匹配完成了,会有很多被截断的...贪婪匹配与非贪婪匹配(惰性匹配) 贪婪匹配: # 在满足匹配匹配尽可能字符串 非贪婪匹配: # 在满足匹配匹配尽可能短的字符串 python的匹配模式默认为贪婪匹配,在量词后面加上 ?...,通过调用group()方法得到匹配字符串,如果字符串没有匹配,则返回None。...调用上述方法  finditer 返回一个放返回结果的迭代器 import re # split 类似于字符串的切割split,返回一个列表(他会把被替换掉的字符变成空格) res = re.split...3个数字 ret = obj.search('abc123eeee') # 正则表达式对象调用search,参数为待匹配字符串 print(ret.group()) # 123 # finditer

    62830

    Python 正则表达式

    其实问为什么的时候,既是给我们做这件事的原因,也是我们遇到困难坚持下去的动力。 那么我们先来看下我们今天的这两个问题。 什么是正则表达式?...正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些匹配某个模式的文本。...findall 和 finditer 提取出来文本中所有的 email,而且通过 finditer 我们还能够得到 email 在文本中的位置。...findall 适用于将文本中所有符合正则表达式的字符串提取出来,比如获取联系电话、地址等等。 finditer 适用于获取文本中符合正则表达式的字符串的位置,比如修改,删除等等操作。...:用来替换匹配内容的字符串(既可以是字符串,也可以是函数); string:要被处理的,要被替换的字符串; count:可选参数,要替换的最大次数,如果忽略或设置为0,所有的匹配都会被替换; flags

    69020

    Python正则表达式re模块简明笔记

    因此,当你不指定 pos 和 endpos ,match 方法默认匹配字符串的头部。 当匹配成功,返回一个 Match 对象,如果没有匹配上,则返回 None。 看看例子。...Match 对象,其中: group([group1, …]) 方法用于获得一个或多个分组匹配字符串,当要获得整个匹配的子串,可直接使用 group() 或 group(0); start...当匹配成功,返回一个 Match 对象,如果没有匹配上,则返回 None。...方法 finditer 方法的行为跟 findall 的行为类似,也是搜索整个字符串,获得所有匹配的结果。...,也就是尽可能多的匹配,因此,在成功匹配到第一个 ,它还会向右尝试匹配,查看是否还有更长的可以成功匹配的子串。

    51550

    5分钟速览python正则表达式常用函数

    主要提供了3大类字符串操作方法: 字符查找/匹配 字符替换 字符分割 由于是面向字符串类型的模块,就不得不提到字符串编码类型。...后续在使用其他正则表达式函数,即可使用pattern进行方法调用。...= '是的, this is a re test' print(pattern.match(text2))#None match函数还有一个变形函数fullmatch,当且仅当模式串与文本串刚好全部匹配...全搜索:findall/finditer 几乎是最常用的正则表达式函数,用于寻找所有匹配的结果,例如在爬虫信息提取中,可非常方便地提取所有匹配字段 import re pattern = re.compile.../分割 替换:sub/subn 当需要对文本串进行条件替换,可调用re.sub实现(当然也可先编译后再用调用实例方法),相应参数分别为模式串、替换格式、文本串,还可以通过增加缺省参数限定替换次数和匹配模式

    1K10

    【从零学习python 】63.正则表达式中的re.Match类及其属性和方法介绍

    re.Match类介绍 当我们调用re.match方法、re.search方法,或者对re.finditer方法的结果进行迭代,拿到的数据类型都是re.Match对象。...x = re.match(r'h','hello') y = re.search(r'e','hello') z = re.finditer(r'l','hello') print(type(x))...属性和方法 说明 pos 搜索的开始位置 endpos 搜索的结束位置 string 搜索的字符串 re 当前使用的正则表达式的对象 lastindex 最后匹配的组索引 lastgroup 最后匹配的组名...ret.endpos) # 搜索结束的位置,默认是字符串的长度 print(ret.group(0)) # abcabcabc 匹配整个表达式 print(ret.group(1)) # abc...第一次匹配到的结果 print(ret.span()) # (3, 12) 开始和结束位置 print(ret.groups()) # 表示当正则表达式里有多个分组,多个分组的匹配结果

    14910

    Python爬虫系列:正则表达式(2)

    当我们用字符串表示\n就需要用两个斜杠,表示起来不是很方便。即:当正则表达式包含,使用raw string。...2.正则库常用函数 当我们在爬取特定内容,不可避免的需要用到正则库,其中正则库中的函数可以帮助我们做很多事,下面将列举最常用到的正则库的主要功能函数: re.search() 在一个字符串中搜索匹配正则表达式的第一个位置...,返回列表类型 re.finditer() 搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素都是match对象 re.sub() 在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串 To...5.finditer函数 简介: re.finditer(pattern,string,flags=0) #搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象 例子: import...pattern:正则表达式的字符串或原生字符串表示 repl:替换匹配字符串字符串 string:待匹配字符串 count:匹配的最大替换次数 flags:正则表达式使用时的控制标记 例子: import

    40860
    领券