资讯专栏INFORMATION COLUMN

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

MycLambert / 512人阅读

摘要:它与新行无关,因此它在模式上与的用法不同。如果没有位置能够匹配这个模式则返回注意这个跟在字符的某处有长度的匹配是有区别的。

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

我已经阅读了现有的相关文档,但是我总是记不住,碰到类似的问题,我还要不断地查找再学习,我希望某个大神能够给个清晰的案例,让我能够很好的记住,或者至少能够在Stackoverflow上有个地方能够让我再学习的时候方便地找到。


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

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

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

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

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

所以,如果你想要从字符串的一开始就进行匹配或匹配整个字符串的话就使用match。它更加快速,否则请使用search。

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

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

注意即使在使用以^开始的正则表达式时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?

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/38148.html

相关文章

  • Python基础教程:-正则表达式基本语法以及re模块

    摘要:正则表达式关闭或可选标志。如果所含正则表达式,以表示,在当前位置成功匹配时成功,否则失败。否则指的是八进制字符码的表达式。 正则表达式是个很牛逼的东西,不管是在javascript,还是在Python web开发(http://www.maiziedu.com/course/python-px...)中,我们都会遇到正则表达式,虽然javascript和Python的正则表达式区别不大...

    y1chuan 评论0 收藏0
  • Python正则表达式

    摘要:正则表达式匹配的字符串限定范围和否定除了单字符外,字符集还支持匹配指定的字符范围。问号要求正则表达式引擎在当前正则表达式中尽可能少地匹配字符。正则表达式匹配的字符串表示简单浮点数的字符串扩展表示法正则表达式的扩展表示法,以问号开始。 简介 正则表达式 是包含文本和特殊字符的字符串, 为高级的文本模式匹配, 抽取, 与文本形式的搜索和替换功能提供了基础 Python通过标准库re模...

    Lowky 评论0 收藏0
  • 使用Python正则表达式操作文本数据

    摘要:在中,使用的内置模块处理正则表达式操作。使用正则表达式对象在字符串中搜索模式。编写和使用正则表达式在中创建正则表达式的第一步是导入模块正则表达式使用模式字符串表示,模式字符串是指定所需搜索模式的字符串。 showImg(https://segmentfault.com/img/remote/1460000019166945?w=504&h=300); 来源 | 愿码(ChainDes...

    Yuanf 评论0 收藏0
  • 众里寻她千百度--正则表达式

    摘要:如果经过一系列输入,最终如果能达到状态,则输入内容一定满足正则表达式。正则表达式可以转换为,已经有成熟的算法实现这一转换。不过有时候转换为可能导致状态空间的指数增长,因此直接用识别正则表达式。 原文地址 先来看一个让人震撼的小故事,故事来自知乎问题PC用户的哪些行为让你当时就震惊了? 同学在一个化妆品公司上班,旁边一个大妈(四十多岁)发给他一个exl表,让他在里面帮忙找一个经销商的资料...

    golden_hamster 评论0 收藏0
  • 正则表达式

    摘要:用户输入的字符串正则表达式切分字符串切分字符串,可以将字符串匹配正则表达式的部分割开并返回一个列表。在字符串中找到正则表达式所匹配的所有子串,并组成一个列表返回。 正则表达式 目录 正则表达式特殊序列 showImg(https://sfault-image.b0.upaiyun.com/343/342/3433429958-5795b5bde9c7d); 表 showImg(http...

    hover_lew 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<