, если разновидность регулярного выражения поддерживает отрицательные взгляды, вы можете попробовать:
\b(?![LXIVCDM]+\b)([A-Z]+)\b
, который говорит "любые слова верхнего регистра, которые не полностью состоят из L, X, I, V, C,D, M "(римские цифры).
Также удобно останавливает преобразование слова" I ".(Кроме того, если вы хотите предотвратить преобразование однобуквенных заглавных слов, используйте [A-Z]{2,}
- это предотвратит преобразование заглавной буквы "A" (в начале предложения) и меня, что обычно требуетсячтобы остаться в их обычном случае).
Это остановило бы слова, состоящие целиком из сопоставляемых букв - единственные, о которых я могу думать, это "DID" и, возможно, "DIV" (как в HTML), "DIM" (как в измерении), "MID", "MIDI", "VIC" (как в Виктории?) ...
Хотя вы, конечно, можете изменить регулярное выражение римских чисел, чтобы оно было немногоболее внимательны к правилам, например
(?=[MDCLXVI])M{0,3}(C[DM]|DC{0,3}|C{1,3})?(X[LC]|LX{0,3}|X{1,3})?(I[XV]|VI{0,3}|I{1,3})?
Объяснение:
(?=[MDCLXVI]) # make sure we match at least something
# (since everything in this regex is optional)
M{0,3} # Can have 0 to 3 Ms, being thousands
(C[DM]|DC{0,3}|C{1,3})? # for the hundreds column can have CD, CM,
# C, CC, CCC, D, DC, DCC, DCCC
(X[LC]|LX{0,3}|X{1,3})? # for the tens column can have XL, XC,
# L, LX, LXX, LXXX, X, XX, XXX
(I[XV]|VI{0,3}|I{1,3})? # for the ones column can have IX, IV,
# V, VI, VII, VIII, I, II, III.
I думаю , который охватывает все возможные римские цифры ....
Если ваш вкус регулярных выражений не не поддерживает отрицательный прогноз, возможно, вы могли бы сделать что-то вроде:
\b((ROMAN_NUMERAL_REGEX)|([A-Z]+))\b
и заменить на "$ 2 $ 3_converted_to_lower_case" (извините - я не знаюкак сделать само преобразование).
Выше будет работать, потому чторегулярное выражение только когда-либо соответствует или регулярному выражению римской цифры (и записывается в $ 2), или другому регулярному выражению (захвачено в $ 3).Таким образом, один из $ 2 или $ 3 всегда пуст.