问:在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 reprint 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 somethingm = 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?

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

  1. Python RE模块中search()和match()的区别

    match()函数只检测RE是不是在string的开始位置匹配, search()会扫描整个string查找匹配: 也就是说match()只有在0位置匹配成功的话才有返回, 如果不是开始位置匹配成功的 ...

  2. python 正则search 所有_python之路----正则re(search,match,findall……)

    关于python中非常强大的模块之一-----re模块,笔者也还只是一个初学者,记录一下关于re下的各个子模块是初步使用. 这里我就不介绍匹配语法了,说一说小括号(值|值)在几个常用模块中的作用(因为 ...

  3. JavaScript中search和match函数的区别

    记得以前还在学校的时候,第一次接触 JavaScript 编程,算是第一种编程入门语言吧,总是分不清 search 和 match 这两个函数的区别,好不容易弄明白了,到了考试的时候又混淆了,唉!气. ...

  4. python中search和match的区别_Python中正则表达式match()、search()函数及match()和search()的区别详解...

    match()和search()都是python中的正则匹配函数,那这两个函数有何区别呢? match()函数只检测RE是不是在string的开始位置匹配, search()会扫描整个string查找 ...

  5. python正则_python中正则匹配

    写代码时候,不管是爬虫,还是获取某些特定的资源,我们需要写正则表达式. 因为不常用,有些语法生疏.有时明明觉得自己的语法可以,可就是不行. 正则表达式是一种文本模式,包括普通字符(例如,a 到 z 之 ...

  6. python交互模式中换行_在Python日志模式中禁止换行

    新行\n插入到StreamHandler类中. 如果您真的设置了修复这个行为,那么这里有一个例子说明我是如何通过logging.StreamHandler类中的monkey patching方法解决这 ...

  7. python 正则 re.match_python正则表达式re.match()匹配多个字符方法的实现

    1.  *表示匹配任意多个字符   \d*表示匹配任意多个数字字符 import re text = "123h1ello world" text1 = "123Hell ...

  8. python正则怎么取反_第11.19节 Python 中正则表达式的扩展功能:前视断言和前视取反...

    一.引言 在<第11.16节 Python正则元字符"()"(小括号)与组(group)匹配模式>中老猿介绍了组匹配模式的命名组功能及引用组功能,这两者都是组模式的扩展 ...

  9. python正则findall函数的用法_python中正则表达式 re.findall 用法

    python中正则表达式 re.findall 用法 Python 正则表达式 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了r ...

最新文章

  1. linux下eclipse cdt主函数main参数值传递设置
  2. 数据结构和算法之稀疏数组
  3. JavaScript复制数组
  4. 用Python分析了20万场吃鸡数据,有不少有趣的发现
  5. 魔兽巨龙追猎者服务器微信群,魔兽世界:难怪现在“龙脊”价格低,掉落率提升,群里一天出几个...
  6. 这个开源组织里的项目都是精品
  7. bootstrap轮播图 原点变为方块_JS实现无缝切换轮播图(自动+手动)
  8. OkHttp3介绍(1)
  9. JFinal Web开发学习(一)开启HelloWorld
  10. C++ 调用 python
  11. 关于TDA1557Q
  12. macos 输入法切换卡顿 macos monterey (已解决)
  13. 六种c++计时器函数(秒级到微妙级)
  14. RSS MSE RMSE之间的关系
  15. 如何制定软件项目测试计划
  16. 技术干货 | 实现模型透明化的有效技术:MindSpore可解释AI能力
  17. HashMap的工作原理(一):Hash算法
  18. 生鲜经营——冷链管理的最后防线
  19. 【线性代数】矩阵及其特性
  20. shader基础学习摘要(三)高光反射

热门文章

  1. Combiner合并案例
  2. TCGA的样本命名规则
  3. 20200605笔记
  4. Flink 1.3.2 Standalone模式安装
  5. 不自动切换eclipse视图
  6. ArrayList转Json的2个坑
  7. OpenCvSharp_FindContours函数参数详解
  8. linux7安装haproxy,Centos7 源码编译安装haproxy
  9. python爬虫模块取cookie_Python爬虫之cookie的获取、保存和使用【新手必学】
  10. 为什么要学python语言_我们为什么要学习Python语言?