Python模块search()中的和match()函数有什么区别?re
search()
match()
re
我已阅读文档(当前文档),但我似乎从未记得它。我一直不得不查找并重新学习它。我希望有人会用例子清楚地回答它,以便(也许)它会留在我的脑海中。或者至少我会有一个更好的地方来回答我的问题,并且重新学习它需要更少的时间。
re.match锚定在字符串的开头。这与换行无关,因此与^在模式中使用不同。
re.match
^
正如re.match 文档所说:
如果字符串开头的 零个或多个字符 与正则表达式模式匹配,则返回相应的MatchObject实例。None如果字符串与模式不匹配则返回;请注意,这与零长度匹配不同。 注意:如果要在字符串中的任何位置找到匹配项,请search() 改用。
如果字符串开头的 零个或多个字符 与正则表达式模式匹配,则返回相应的MatchObject实例。None如果字符串与模式不匹配则返回;请注意,这与零长度匹配不同。
MatchObject
None
注意:如果要在字符串中的任何位置找到匹配项,请search() 改用。
re.search如文档所述,搜索整个字符串:
re.search
扫描字符串 以查找正则表达式模式产生匹配的位置,并返回相应的MatchObject实例。None如果字符串中没有位置与模式匹配,则返回;请注意,这与在字符串中的某个点找到零长度匹配不同。
因此,如果您需要匹配字符串的开头,或者匹配整个字符串,请使用match. 它更快。否则使用search.
match
search
该文档有一个针对vs.的特定部分,match``search其中也涵盖了多行字符串:
match``search
Python 基于正则表达式提供了两种不同的原始操作: 仅在字符串的开头*match检查 匹配,而在字符串中的 任何位置 检查匹配 (这是 Perl 默认所做的)。 search *** 请注意, 即使使用以:开头的正则表达式match也可能有所不同,仅匹配字符串的开头,或者在 模式下也紧跟换行符。 仅当模式在 字符串的 _ 开头*_ 匹配( 无论模式如何)或在可选 参数给出的起始位置(无论是否有换行符在其前面)时,“” “”操作才会成功。search``'^'``'^'``MULTILINE``match _ *_pos
Python 基于正则表达式提供了两种不同的原始操作: 仅在字符串的开头*match检查 匹配,而在字符串中的 任何位置 检查匹配 (这是 Perl 默认所做的)。 search ***
请注意, 即使使用以:开头的正则表达式match也可能有所不同,仅匹配字符串的开头,或者在 模式下也紧跟换行符。 仅当模式在 字符串的 _ 开头*_ 匹配( 无论模式如何)或在可选 参数给出的起始位置(无论是否有换行符在其前面)时,“” “”操作才会成功。search``'^'``'^'``MULTILINE``match _ *_pos
search``'^'``'^'``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