译-在Python正则模式中search()和match()的区别是什么?

问:在Python正则模式中search()和match()的区别是什么?python

我已经阅读了现有的相关文档,可是我老是记不住,碰到相似的问题,我还要不断地查找再学习,我但愿某个大神可以给个清晰的案例,让我可以很好的记住,或者至少可以在Stackoverflow上有个地方可以让我再学习的时候方便地找到。正则表达式


答:
re.match位于字符串的开头。它与新行无关,所以它在模式上与^的用法不一样。
正如re.match文档所说:学习

若是在字符串的开头有0个或更多个字符符合正则表达式模式,返回相关匹配的实例对象,若是字符串不符合正则表达式模式则返回None.(注这个跟0长度的匹配是有区别的)code

注:若是你想要在字符串中定位任意一个匹配位置的话,请转用search()。对象

re.search搜索整个字符串,正如re.search文档所说:文档

扫描整个字符串,若是产生了一个匹配正则模式就寻找到这个位置,返回相关匹配的对象。若是没有位置可以匹配这个模式则返回None.(注意这个跟在字符的某处有0长度的匹配是有区别的。)字符串

因此,若是你想要从字符串的一开始就进行匹配或匹配整个字符串的话就使用match。它更加快速,不然请使用search。get

该文档有个专门的章节讲述match和search一样覆盖了多行字符串:string

Python根据正则表达式提供两种不一样的基本操做:match只在字符串的开始确认一个匹配,而search在字符串的任何匹配的位置都确认。(Perl默认就是这么设置的)it

注意即便在使用以^开始的正则表达式时match也可能不一样于search:
^只在字符串的开头匹配,或在多行模式马上紧跟一个新行。
无论出于什么模式,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

译者注:
1.re.match() 从第一个字符开始找, 若是第一个字符就不匹配就返回None, 不继续匹配. 用于判断字符串开头或整个字符串是否匹配,速度快.
2.re.search() 会整个字符串查找,直到找到一个匹配。
3.re.MULTILINE 匹配多行模式。

来源:Stackoverflow问题。
What is the difference between Python's re.search and re.match?

相关文章
相关标签/搜索