У вас нет пробела до VI
пробел принадлежит всегда альтернативе до того, как она была написана, а не всем.То же самое для \.
, оно всегда принадлежит альтернативе, в которой оно было написано.
Попробуйте это
" (IX|IV|V?I{0,3}|M{1,4}|CM|CD|D?C{1,3}|XC|XL|L?X{1,3})\."
См. здесь на Regexr
Это будет соответствовать
I.
II.
III.
IV.
V.
VI.
VII.
VIII.
IX.
X.
Но не
XI.MMI.MMXI.
somethinvianyyhing
Ваш подход к сопоставлению римских чисел далек от правильного , подход к сопоставлению римских чисел более корректен, для чисел до 50 (L)
^(?:XL|L|L?(?:IX|X{1,3}|X{0,3}(?:IX|IV|V|V?I{1,3})))$
Посмотрите на это здесь на Regexr
Я проверил это только на поверхности, но вы видите, что это действительно станет сложным и в этом выражении C, D и Mвсе еще отсутствуют.
Не говоря уже об особых случаях, например, 4 = IV = IIII, и их больше.
Википедия о римских числах