python regex(验证ROMAN NUMBERS)

时间:2016-07-02 16:31:50

标签: python

import re

print( True if (re.search(r"^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$",input())) else False)

在下面的代码中检查给定的罗马数字是否有效,为什么在打印语句中没有包含^和$时打印出不同的答案,等等。从理论上讲,^和$只是为了在开头和结尾显示匹配模式。

1 个答案:

答案 0 :(得分:3)

简短回答:因为re.search()re.match()不一样。

re.search()在整个输入中搜索与给定模式的匹配,而re.match()要求模式在输入的开头匹配。 独立于此,您可以强制模式仅在输入的开头/结尾与^ / $匹配。有关详细说明,请参阅docs

在您的情况下,re.search(your_pattern_without_^)将与"QQQQXII"匹配,因为没有任何内容强制执行整个输入的匹配。另一方面,re.search(your_pattern_with_^)re.match(your_pattern_without_^)"QQQQXII"不匹配,因为模式或re.match()要求在输入的开头匹配。