在Python正则表达式中使用re.search over re.findall什么时候有意义?
我理解在Python中使用在Python正则表达式中使用re.search over re.findall什么时候有意义?,python,regex,Python,Regex,我理解在Python中使用re.search和re.findall之间的技术区别,但是有经验的人能否解释一下,在哪些情况下,您可能会使用re.search而不仅仅是使用re.findall进行正则表达式解析?来自文档 重新搜索(模式、字符串、标志=0):-扫描字符串以查找 正则表达式模式生成 匹配,并返回相应的MatchObject实例。如果是,则返回None 字符串中没有与模式匹配的位置;请注意,这是 不同于在中的某个点上查找零长度匹配 绳子 i) 如果您只想查找字符串中是否存在模式,可以使用
re.search
和re.findall
之间的技术区别,但是有经验的人能否解释一下,在哪些情况下,您可能会使用re.search
而不仅仅是使用re.findall
进行正则表达式解析?来自文档
重新搜索(模式、字符串、标志=0):-扫描字符串以查找
正则表达式模式生成
匹配,并返回相应的MatchObject实例。如果是,则返回None
字符串中没有与模式匹配的位置;请注意,这是
不同于在中的某个点上查找零长度匹配
绳子
i) 如果您只想查找字符串中是否存在模式,可以使用re.search
例如
a+ in string abcdaa
将告诉字符串abcaa
中是否存在一个或多个a
。如果找到匹配项,它将返回找到字符串的MatchObject,否则None
。它将不会检查该模式是否再次出现。因此,如果您使用re.search('a+','abcdaa')。组(0)
则字符串abcdaa
另一方面,re.findall
将返回在字符串中找到的所有匹配项,如字符串abcdaa
的[a,aa]
。因此,我们可以说re.findall
是python使用g
标志查找所有匹配项的方法
ii)有人可能会说,为什么不使用re.findall
查找所有匹配项,如果列表非空,那么我们可以说该模式存在
在这种情况下,re.findall
将比re.search
慢(很多)
比较(处理器-英特尔®核心™ i5-5200U CPU@2.20GHz×4,内存-7.7Gib)
在大小为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
re.findall
可以理解为python处理全局匹配的方式。如果您只想找出字符串中存在模式的位置,可以使用re.search
re.search
=“找到第一个匹配”,<代码> Re.Field=“查找所有匹配”,谢谢你的回答,这也给了我更多的考虑。“McLeodx很高兴帮助你,我认为你在第二个打印语句中指的是代码> Re.FundLo/<代码>。