Python re模块中的search()和match()函数有什么区别?
我读过Python 2文档(Python 3文档),但我似乎从来都不记得它。我得不停地查资料,重新学习。我希望有人能用例子清楚地回答这个问题,这样(也许)我就能记住它了。或者至少我可以有一个更好的地方带着我的问题回来,重新学习的时间也会更少。
Python re模块中的search()和match()函数有什么区别?
我读过Python 2文档(Python 3文档),但我似乎从来都不记得它。我得不停地查资料,重新学习。我希望有人能用例子清楚地回答这个问题,这样(也许)我就能记住它了。或者至少我可以有一个更好的地方带着我的问题回来,重新学习的时间也会更少。
当前回答
迅速的回答
re.search('test', ' test') # returns a Truthy match object (because the search starts from any index)
re.match('test', ' test') # returns None (because the search start from 0 index)
re.match('test', 'test') # returns a Truthy match object (match at 0 index)
其他回答
迅速的回答
re.search('test', ' test') # returns a Truthy match object (because the search starts from any index)
re.match('test', ' test') # returns None (because the search start from 0 index)
re.match('test', 'test') # returns a Truthy match object (match at 0 index)
区别在于,re.match()会误导任何习惯Perl、grep或sed正则表达式匹配的人,而re.search()则不会。: -)
更严肃地说,就像John D. Cook所说的,re.match()“表现得好像每个模式都有^的前缀。”换句话说,re.match('pattern')等于re.search('^pattern')。所以它锚定了图案的左侧。但它也没有锚定模式的右侧:这仍然需要一个终止$。
坦率地说,鉴于上述情况,我认为re.match()应该被弃用。我很想知道保留它的原因。
Re.search在整个字符串中搜索模式,而re.match不搜索模式;如果不匹配,则只能在字符串的开头匹配它。
Re.match尝试匹配字符串开头的模式。Re.search尝试在整个字符串中匹配模式,直到找到匹配。
搜索:在字符串的任何地方查找,并返回一个匹配对象。
Match:查找字符串开头的内容并返回一个匹配对象。