当前位置: 首页 > 面试题库 >

Python-re.search和re.match有什么区别?

贺飞
2023-03-14
问题内容

search()和Python 模块中的match()函数和有什么区别?re

我已经阅读了文档(当前文档),但是我似乎从未记得它。我一直在查找并重新学习它。我希望有人会用示例清楚地回答它,以便(也许)它会贴在我的头上。或者至少我将有一个更好的地方来回答我的问题,并且重新学习它所花的时间会更少。


问题答案:

re.match锚定在字符串的开头。这与换行无关,因此它与^在模式中使用的方式不同。

如重新匹配文档所述:

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

注意:如果要在字符串中的任何位置找到匹配项,请search() 改用。

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

扫描字符串以查找正则表达式模式产生匹配的位置,然后返回相应的MatchObject实例。None如果字符串中没有位置与模式匹配,则返回;否则返回false。请注意,这与在字符串中的某个点找到零长度匹配不同。

因此,如果你需要匹配字符串的开头,或者匹配整个字符串,请使用match。它更快。否则使用search

该文档中有一个专门针对matchvs.的部分search,还涵盖了多行字符串:

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


 类似资料:
  • re.match 函数 语法: re.match(pattern, string, flags=0) re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match() 就返回 none。 re.search 函数 语法: re.search(pattern, string, flags=0) re.search 扫描整个字符串并返回第一个成功的匹配。 re.m

  • 问题内容: 我正在使用读取csv文件的两列,然后将值分配给字典。这些列包含数字和字母字符串。有时在某些情况下单元格为空。在我看来,应读取但应分配该字典条目的值。当然,由于它具有空值,因此更能描述一个空单元格,而nan只是说读取的值不是数字。 我的理解正确吗,和之间有什么区别?为什么分配而不是? 另外,我的字典检查是否有任何空单元格一直在使用: 但这给了我一个错误,说我不能使用此检查v。我猜这是因为

  • 问题内容: 和之间有适用的区别吗? 从Python文档中: :返回字典的(键,值)对列表的副本。 :在字典的(键,值)对上返回迭代器。 如果我运行下面的代码,每个似乎都返回对同一对象的引用。我缺少任何细微的差异吗? 输出: 问题答案: 这是演变的一部分。 最初,构建了一个真正的元组列表,并将其返回。这可能会占用大量额外的内存。 然后,一般将生成器引入该语言,然后将该方法重新实现为名为的迭代器-生成

  • 问题内容: 我知道是软件包的软件包管理器。但是,我看到网站上的安装用于安装IPython。 我可以用来安装吗?我已经拥有了为什么还要用作另一个python软件包管理器pip? 和之间有什么区别? 问题答案: 引用来自Conda博客: 参与python世界已经很长时间了,我们都知道,,但是这些工具不能满足我们所有的特定要求。主要问题是它们专注于Python,而忽略了非Python库依赖项,例如HDF

  • 问题内容: 这两个代码片段之间有什么区别?使用: 使用isinstance(): 问题答案: 总结答案的内容,迎合继承(派生类的实例也是基类的实例),而检查的相等性type则不(要求类型的标识并拒绝实例)子类型,又称为AKA子类)。 通常,在Python中,你当然希望你的代码支持继承(因​​为继承非常方便,因此停止使用你的代码来使用它会很糟糕!),因此它比检查的身份要糟糕得多,因为它无缝地支持s遗

  • 问题内容: 据我对Docker的了解,它是用于虚拟环境的工具。用他们的术语来说,它叫做“容器化”。这或多或少是Python的virtualenv所做的。但是,您可以 在 Docker中使用virtualenv 。那么,它是虚拟环境内部的虚拟环境吗?我对这甚至如何工作感到困惑,所以有人可以澄清一下吗? 问题答案: virtualenv仅封装Python依赖项。Docker容器封装了 整个OS 。 借