Single Regex для фильтрации римских цифр из текстовых файлов - PullRequest
3 голосов
/ 05 апреля 2010

Я застрял между проблемой, когда разрешен только один проход регулярного выражения (какой-то старый жесткий код). Мне нужно регулярное выражение для римских цифр.

Я пробовал стандартный, т.е. ^(?i)M*(D?C{0,3}|C[DM])(L?X{0,3}|X[LC])(V?I{0,3}|I[VX])$, но проблема в том, что он допускает также нулевые ('') значения.

Есть ли способ проверить, является ли проблема?

Ответы [ 2 ]

2 голосов
/ 05 апреля 2010

Чтобы требовать, чтобы присутствовал хотя бы один символ, вы можете использовать lookahead (?=.) в начале вашего регулярного выражения:

^(?=.)(?i)M*(D?C{0,3}|C[DM])(L?X{0,3}|X[LC])(V?I{0,3}|I[VX])$

Другое решение состоит в том, чтобы отдельно проверить, что ваша строка не является пустой строкой.

1 голос
/ 12 июля 2014

Мне нравится этот:

\b(?=[MDCLXVI]+\b)M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})\b
...