为啥这个正则表达式只在 Python 中的行首匹配? [复制]

Posted

技术标签:

【中文标题】为啥这个正则表达式只在 Python 中的行首匹配? [复制]【英文标题】:Why does this Regex only match at the start of the line in Python? [duplicate]为什么这个正则表达式只在 Python 中的行首匹配? [复制] 【发布时间】:2016-03-14 14:08:12 【问题描述】:

在 Python 中我可以做到

import re
re.match("m", "mark")

我得到了预期的结果:

<_sre.SRE_Match object; span=(0, 1), match='m'>

但它只有在模式位于字符串开头时才有效:

re.match("m", "amark")

给出None。注意到该模式要求它位于字符串的开头 - 没有 ^ 或类似的。事实上,它在regex101 上按预期工作。

Python 是否有一些特殊行为 - 请问如何禁用它?

【问题讨论】:

此问题与标记的问题不重复。是的,答案是重复的,但问题来自完全不同的角度。我必须知道我的问题的答案才能将另一个识别为“重复”。 这绝对是一个骗子,如果不是那个,还有一个关于re.match的。顺便说一句,re.matchline 的开头不匹配,它只在 string 的开头匹配。 我没说这不是骗子。我说这不是被标记的人的欺骗。它应该被标记为一个问题的欺骗,而不是其他问题。 绝对是重复的。此外,re.match 的文档清楚地表明它试图“在字符串的开头应用模式”。在这里花点时间研究会很有意义。 我想指出,以这种方式表达的问题使我能够找到答案。我确实阅读了文档,但在第一遍时我错过了。感谢您提出这个问题。 【参考方案1】:

来自re.match 上的文档:

如果string开头有零个或多个字符与正则表达式pattern匹配,则返回对应的匹配对象。

使用re.search 搜索整个字符串。

文档甚至为这个问题提供了单独的章节,概述了两者之间的区别:search() vs. match()

【讨论】:

Repetitio est mater studiorum. et suppositio nil ponit in esse.【参考方案2】:
import re 
re.match("[^m]*m", "mark")

match 从字符串的开头匹配。所以如果m 不在字符串的开头,你需要给它一个匹配字符串开头的方法。

【讨论】:

以上是关于为啥这个正则表达式只在 Python 中的行首匹配? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

没有特定单词的行匹配的正则表达式

正则find使用

Linux 正则表达

Linux 正则表达

phplinuxjavascript 正则表达式

正则表达式之元字符