Удалить нумерацию, используя римские цифры - PullRequest
4 голосов
/ 15 мая 2019

Я пытаюсь удалить действительные римские цифры (нумерацию) из текста, который содержит заголовки, абзацы и т. Д. *

Я использую это регулярное выражение :

Pattern ROMAN = Pattern.compile("^[([]‌?x{0,3}(i[xv]‌|v?i{0,3})[)\.]/]{1,2}", Pattern.CASE_INSENSITIVE);

Хотя это также соответствует пустой скобке.

Я хочу удалить следующее:

Input :
iv. foo foo foo.
Output:
foo foo foo.
Input :
v) foo foo foo.
Output:
foo foo foo.

Но также ничего не делайте, когда не используете их для нумерации:

Input :
foo foo foo i) foo v) .
Output:
foo foo foo i) foo v) .

Еще один пример того, чему должно соответствовать регулярное выражение: iv) X) ix/ V/ x. IV.

Ответы [ 2 ]

1 голос
/ 15 мая 2019

Следующее регулярное выражение сделает это:

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

См. Объяснение ...

enter image description here

Здесь вы можете визуализировать ваше выражение ...

1 голос
/ 15 мая 2019

Как насчет чего-то похожего на Regex :

^((?=[mdclxvi])m*(c[md]|d?c{0,3})(x[cl]|l?x{0,3})(i[xv]|v?i{0,3})(?:\)|\.))

Это соответствует римскому номеру, за которым следуют либо ), либо . символы.Есть хорошая статья о сопоставлении римских чисел Поваренная книга регулярных выражений от Стивена Левитана, Яна Гойваэртса из O'Reilly.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...