In this validating Roman Numerals problem, You are given a string, and you have to validate whether it's a valid Roman numeral. If it is valid, print True. Otherwise, print False.

HackerRank Validating Roman Numerals solution in python


Problem solution in Python 2 programming.

import sys
import re
pattern = '^M{0,3}(D?C{0,3}|C(D|M))(L?X{0,3}|X(L|C))(V?I{0,3}|I(V|X))$'

string = sys.stdin.readline().strip()
match = re.search(pattern, string)
if match and string != '':
    print 'True'
else:
    print 'False'


Problem solution in Python 3 programming.

thousand = 'M{0,3}'
hundred = '(C[MD]|D?C{0,3})'
ten = '(X[CL]|L?X{0,3})'
digit = '(I[VX]|V?I{0,3})'
regex_pattern = r"%s%s%s%s$" % (thousand, hundred, ten, digit)   # Do not delete 'r'


Problem solution in pypy programming.

# Enter your code here. Read input from STDIN. Print output to STDOUT
import re
pattern = '^(?=[MDCLXVI])M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$'
roman = str(raw_input())
if re.search(pattern, roman):
    print 'True'
else:
    print 'False'


Problem solution in pypy3 programming.

# Enter your code here. Read input from STDIN. Print output to STDOUT
import re

ptrn = r'^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$'
s = input().strip()

x = re.match(ptrn,s)
if x:
    print(True)
else:
    print(False)