batalla:
Estoy intentando quitar números romanos válidos (numeración) a partir de un texto que contiene encabezados, párrafos, etc ...
Estoy usando esta expresión regular :
Pattern ROMAN = Pattern.compile("^[([]?x{0,3}(i[xv]|v?i{0,3})[)\.]/]{1,2}", Pattern.CASE_INSENSITIVE);
A pesar de que coincide también el paréntesis vacío.
Lo que quiero hacer es quitar la siguiente:
Input :
iv. foo foo foo.
Output:
foo foo foo.
Input :
v) foo foo foo.
Output:
foo foo foo.
Pero también no hacer nada cuando no usarlos para la numeración:
Input :
foo foo foo i) foo v) .
Output:
foo foo foo i) foo v) .
Otro ejemplo de lo que debe coincidir con la expresión regular: iv)
X)
ix/
V/
x.
IV.
Nikolas:
¿Qué tal algo como la siguiente expresión regular :
^((?=[mdclxvi])m*(c[md]|d?c{0,3})(x[cl]|l?x{0,3})(i[xv]|v?i{0,3})(?:\)|\.))
Esto coincide con un número romano que es seguido por cualquiera )
o .
caracteres. Hay un buen artículo sobre la correspondencia de los números romanos expresiones regulares Cookbook por Steven Levithan, Jan Goyvaerts de O'Reilly.