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