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

我已阅读文档当前文档),但我永远不会觉得要记住它。我保留无需查找和重新学习它。我希望,有人将回答它清楚地使用示例,以便 (或许) 它将坚持我的头。或至少我有更好的地方,将我的问题,它需要更少的时间来重新学习它。

2008-10-08 00:51:36
问题评论:

不,我没有开玩笑。我已阅读本文档中,但我所希望的人会拿出答案,它是更清楚 (这将但愿贴在我的头因此不必保留进行查询)。我会编辑问题。

用我的内存,我很快就会不堪重负张贴便条。;-)

回答:

re.match被定位在字符串的开头。没有用新,因此不是相同的模式中使用^

根据re.match 文档指出︰

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

注意︰ 如果您想要在字符串中的任意位置定位匹配,改用search()

re.search作为文档指出搜索整个字符串,:

通过字符串扫描寻找其中的正则表达式模式产生的匹配项,并返回相应的MatchObject实例的位置。返回None任何字符串中的位置与模式;请注意,这不同于在字符串中查找某些时候的零长度匹配。

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

文档包含searchmatch的特定部分,还介绍了多行字符串︰

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

请注意即使是使用一个正则表达式开头match可能不同于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

包含换行符的字符串呢?

即使使用包含换行符的字符串,match() 只在字符串的开头匹配。

这就是我所希望的答案 !(尤其是您提供的示例)。

为什么任何人使用有限match而不是更多常规search然后?对于速度就是这样吗?

是不是搜索,而不是执行 regex.search("word") 操作要快得多的 @Alby 匹配可以执行 regex.match((.*?)word(.*?))并获得吨的性能,如果您正在使用的样本数以百万计。

re.search 搜索对应的模式在整个字符串,而re.match does不搜索模式;如果不是的话,它有比任何其他选项匹配到它在字符串的开头。

为什么在开始,但直到结尾的字符串 (在 phyton 3.4fullmatch ) 不与匹配?

search⇒ 在字符串中查找某些任意位置并返回匹配的对象。

match的 ⇒ 发现在字符串的开头并返回匹配的对象。

re.match 尝试匹配模式在字符串的开头re.search 尝试匹配模式在整个字符串,直到它找到一个匹配项。

您可以参考以下示例,了解 re.match 和 re.search 的工作

a = "123abc"
t = re.match("[a-z]+",a)
t = re.search("[a-z]+",a)

re.match 将返回无,但 re.search 将返回 abc。

请输入您的翻译

What is the difference between Python's re.search and re.match?

确认取消