Python中的正则表达式不使用mach字符串(但在检查rubular时使用)

Python中的正则表达式不使用mach字符串(但在检查rubular时使用),python,regex,Python,Regex,我正在用Python编写一个使用正则表达式的程序。我遇到了问题,因为我认为应该与字符串匹配的表达式不符合要求。这是再现我的问题的python代码: regex = re.compile(r"ord(er)? *0?([1-4])", re.I) m = regex.match("CMord01") m的计算结果为FALSE。 我很想知道原因。 我已经检查过了,表达式确实与字符串匹配。 谢谢大家! 在Python中re.match()从字符串开头匹配。CMord01中的第一个字母是C,而不是O,

我正在用Python编写一个使用正则表达式的程序。我遇到了问题,因为我认为应该与字符串匹配的表达式不符合要求。这是再现我的问题的python代码:

regex = re.compile(r"ord(er)? *0?([1-4])", re.I)
m = regex.match("CMord01")
m的计算结果为FALSE。 我很想知道原因。 我已经检查过了,表达式确实与字符串匹配。 谢谢大家!

在Python中
re.match()
从字符串开头匹配。
CMord01
中的第一个字母是
C
,而不是
O
,因此它不匹配


大多数语言的正则表达式模块没有这个限制,所以它们匹配字符串没有问题。要在Python中实现这种行为,您需要使用
re.search()
。有关这两个函数之间差异的更多信息,请参阅。

使用
regex.search()
而不是
regex.match()
。请参阅Python文档中的内容。在您的表达式中,字符串的开头应该是ord。它不包括CM。您可能想在regexp前面加上
*
。@MarekKowalski这显然是可行的,但所有这些垃圾字符都会作为匹配的一部分返回。根据他们对比赛的计划,这可能会使事情变得肮脏/复杂,问题解决了!我不知道search()和match(),现在我知道了。@Guio这是Python的一种特性。我记得我必须解决同样的问题。