2016-07-02 4 views
1
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) 

주어진 로마 숫자가 유효한지 확인하거나^및 $가 print 문에 포함되지 않은 경우 다른 대답이 인쇄되는 이유는 다음과 같습니다. . 이론적으로 ^와 $는 처음과 끝에서 일치하는 패턴을 보여주는 것입니다.python 정규식 (로마 숫자 유효화)

답변

3

짧은 대답 : re.search()re.match()은 같지 않습니다.

re.search()은 전체 입력에서 지정된 패턴과 일치하는 것을 검색하는 반면 re.match()에서는 입력 시작 부분에서 일치시킬 패턴이 필요합니다. 그것과는 별도로, 입력의 시작/끝에서만 ^/$로 패턴을 일치시킬 수 있습니다. 자세한 설명은 docs을 참조하십시오.

re.search(your_pattern_without_^)"QQQQXII"과 일치합니다. 입력 사항 전체에 일치를 적용 할 항목이 없기 때문입니다. 반면에 또는 re.match(your_pattern_without_^)은 패턴이 입력 시작 부분에서 일치해야하기 때문에 "QQQQXII"과 일치하지 않습니다.