gpt4 book ai didi

python - 什么时候在 Python 正则表达式中使用 re.search 而不是 re.findall 才有意义?

转载 作者:行者123 更新时间:2023-12-01 03:54:57 25 4
gpt4 key购买 nike

我了解在 Python 中使用 re.searchre.findall 之间的技术差异,但是有更多经验的人能否解释一下您可能使用 的情况re.search 而不是仅使用 re.findall 进行正则表达式解析?

最佳答案

来自文档

re.search(pattern, string, flags=0) :- Scan through string looking for the first location where the regular expression pattern produces a match, and return a corresponding MatchObject instance. Return None if no position in the string matches the pattern; note that this is different from finding a zero-length match at some point in the string.

i) 如果你只是想查找字符串中是否存在某个模式,你可以使用 re.search 例如

a+ in string abcdaa

将判断字符串abcaa中是否存在一个或多个a。如果找到匹配,它将返回一个匹配字符串的 MatchObject,否则返回 None。它不会检查该模式是否再次出现。因此,如果您使用 re.search('a+', 'abcdaa').group(0),您只会获得字符串 abcdaaa >

另一方面,re.findall 将返回在字符串中找到的所有匹配项,例如字符串 abcdaa< 的 [a, aa]/。因此,我们可以说 re.findall 是使用 g 标志查找所有匹配项的 Python 方式。

ii) 有人可能会说,为什么不使用 re.findall 来查找所有匹配项,如果列表非空,那么我们就可以说该模式存在。

在这种情况下,re.findall 将比 re.search 慢(很多)。

比较(处理器 - Intel® Core™ i5-5200U CPU @ 2.20GHz × 4内存 - 7.7 GiB)

在大小为 10000000 的字符串上,使用以下代码

import re
import time

st = "".join(str(n) for n in range(10000000))

start_time = time.time()
re.search(r"1+", st)
first_time = time.time()
print("Time taken by re.search = ", first_time - start_time, "seconds")

re.findall(r"1+", st)
second_time = time.time()
print("Time taken by re.findall = ", second_time - first_time, "seconds")

输出为

Time taken by re.search =  0.00011801719665527344 seconds
Time taken by re.findall = 1.7739462852478027 seconds

所以,如果我们只是想知道字符串中是否存在某种模式,那么使用re.search是有利的。

关于python - 什么时候在 Python 正则表达式中使用 re.search 而不是 re.findall 才有意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37640602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com