为什么这个正则表达式只在Python的行开头匹配?

时间:2015-12-09 10:29:46

标签: python regex

在Python中,我可以做到

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

我得到了预期的结果:

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

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

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

给出None。关于这种模式需要它在字符串的开头 - 没有^或类似的东西。事实上,它在regex101上按预期工作。

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

2 个答案:

答案 0 :(得分:11)

来自re.match上的文档:

  

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

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

文档甚至将此问题作为自己的章节,概述了两者之间的差异:search() vs. match()

答案 1 :(得分:0)

import re 
re.match("[^m]*m", "mark")

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