我已经学习python几周了。目前我在Python的re.findall()中遇到了一些问题/疑问。 在一些书籍或视频中,他们使用re.search()很少使用match()。在django文档中,我读取搜索找到第一个匹配,并且re.match在字符串的开头找到匹配。
但在所有情况下,re.findall()都能正常运行。那么为什么我不应该一直只使用re.findall()?
由于我想在Python中变得更好,我想了解它,因此我问了这个问题。
最好的问候乔纳森
答案 0 :(得分:1)
最重要的原因是性能:findall
需要查找所有出现的内容,因此它会搜索整个字符串。 search
只搜索字符串直到找到匹配项,因此如果模式存在则会更快。 match
只是检查字符串的开头是否与模式匹配,因此它可能不需要搜索整个字符串(在某些边缘情况除外)。
因此,findall
在最佳情况下会比match
或search
慢。
此外findall
还会存储所有匹配项,因此它可以轻松占用比仅存储第一个匹配项的search
或match
更多的内存(或者根本不存储任何内容)。
所以findall
的内存更贵。
最后但并非最不重要match
和search
返回SRE_Match
个对象,这些对象不仅存储匹配的子字符串,还存储位置(如果使用带捕获组的模式,则为组)。谢谢@kindall在评论中发布了这个内容。
因此,虽然您可以使用findall
代替match
或search
,但它可能会更慢,使用更多内存并为匹配存储更少的信息。因此,我不会将其用作search
或match
的替代品,除非您还需要查找所有其他事件。