re.search 和 re.match 有什么区别?

新手上路,请多包涵

Python re 模块 中的 search()match() 函数有什么区别?

我已阅读 文档当前文档),但我似乎从未记得它。我一直不得不查找并重新学习它。我希望有人会用例子清楚地回答它,以便(也许)它会留在我的脑海中。或者至少我会有一个更好的地方来回答我的问题,并且重新学习它需要更少的时间。

原文由 Daryl Spitzer 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 630
2 个回答

re.match 锚定在字符串的开头。这与换行无关,因此与在模式中使用 ^

正如 re.match 文档 所说:

如果 字符串开头的 零个或多个字符与正则表达式模式匹配,则返回对应的 MatchObject 实例。如果字符串与模式不匹配,则返回 None ;请注意,这与零长度匹配不同。

注意:如果要在字符串中的任意位置查找匹配项,请改用 search()

re.search 搜索整个字符串,如 文档所述

扫描字符串 寻找正则表达式模式产生匹配的位置,并返回对应的 MatchObject 实例。如果字符串中没有位置与模式匹配,则返回 None ;请注意,这与在字符串中的某个点找到零长度匹配不同。

因此,如果您需要匹配字符串的开头,或者匹配整个字符串,请使用 match 。它更快。否则使用 search

该文档有一个 特定的部分 matchsearch 也涵盖了多行字符串:

Python 基于正则表达式提供了两种不同的原始操作: match 仅在字符串的开头 检查匹配,而 search 检查字符串中 任何位置 的匹配(这就是Perl 默认情况下会这样做)。

Note that match may differ from search even when using a regular expression beginning with '^' : '^' matches only at the start of the string ,或在 MULTILINE 模式下也紧跟换行符。 “ match ” 操作 只有当模式匹配在字符串的 开头 而不考虑模式时,或者在可选的 pos 参数给出的起始位置匹配时,操作才会成功,无论换行符是否在前面它。

现在,足够的谈话。是时候看一些示例代码了:

 # example code:
string_with_newlines = """something
someotherthing"""

import re

print re.match('some', string_with_newlines) # matches
print re.match('someother',
               string_with_newlines) # won't match
print re.match('^someother', string_with_newlines,
               re.MULTILINE) # also won't match
print re.search('someother',
                string_with_newlines) # finds something
print re.search('^someother', string_with_newlines,
                re.MULTILINE) # also finds something

m = re.compile('thing$', re.MULTILINE)

print m.match(string_with_newlines) # no match
print m.match(string_with_newlines, pos=4) # matches
print m.search(string_with_newlines,
               re.MULTILINE) # also matches

原文由 nosklo 发布,翻译遵循 CC BY-SA 3.0 许可协议

search ⇒ 在字符串中的任何地方找到一些东西并返回一个匹配对象。

match ⇒ 在字符串的 开头 找到一些东西并返回一个匹配对象。

原文由 Dhanasekaran Anbalagan 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题