gpt4 book ai didi

python - 为什么不总是使用Python的re.findall而不是re.search

转载 作者:行者123 更新时间:2023-12-01 02:20:26 25 4
gpt4 key购买 nike

我已经学习Python几个星期了。目前我对 Python 的 re.findall() 有一些问题/疑问。在一些书籍或视频中,他们使用 re.search() 很少使用 match()。在 django 文档中,我读到 search 找到第一个匹配项,而 re.match 在字符串开头找到匹配项。

但在所有情况下,re.findall() 都会工作得很好。那么为什么我不应该一直只使用 re.findall() 呢?

因为我想更好地使用 Python,所以我想理解它,所以我问了这个问题。

最诚挚的问候乔纳森

最佳答案

最重要的原因是性能:findall 需要查找所有出现的情况,因此它会搜索整个字符串。 search 只是搜索字符串直到找到匹配项,因此只要存在模式,速度就会更快。 match 只是检查字符串的开头是否与模式匹配,因此它可能不需要搜索整个字符串(除了某些边缘情况)。

因此,在最好的情况下,findall 会比 matchsearch 慢。

此外,findall 还存储所有匹配项,因此它很容易比仅存储第一个匹配项的 searchmatch 占用更多内存(或者什么也没有)。

因此 findall 的内存消耗更大。

最后但并非最不重要的一点是 matchsearch 返回 SRE_Match 对象,该对象不仅存储匹配的子字符串,还存储位置(以及组,如果您使用带有捕获组的模式)。感谢 @kindall 在评论中发布了此内容。

因此,虽然您可以使用 findall 而不是 matchsearch,但它可能会更慢,使用更多内存并存储更少的信息。匹配。因此,我不会使用它来替代 searchmatch 除非您需要查找所有其他事件。

关于python - 为什么不总是使用Python的re.findall而不是re.search,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48012824/

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