Las expresiones regulares para que coincida con los números (tanto regulares y romanos)

daveoncode:

Estoy intentando escribir una expresión regular para que coincida con los dos números regulares (1, 2, 42 ...) y los romanos (X, VII ...).

Pero el que yo he Actualmente escribió :

\b((?=[MDCLXVI])M{0,3}(C[MD]|D?C{0,3})(X[CL]|L?X{0,3})(I[XV]|V?I{0,3}))\b|\b\d+\b

se emparejan más de lo esperado. Cuenta con 9 partidos, mientras que espero que sólo el 4:

  • XII
  • VII
  • 2
  • 12

¿Cómo puedo arreglarlo?

Wiktor Stribiżav:

La razón de ello es la posibilidad de un partido de anchura cero con los patrones de contorno simplemente de palabras (es decir, \b(?=[MDCLXVI])\bpartidos antes de cualquier palabra que empiece con la letra número romano).

Es necesario precisar los límites de palabras, hacen que el líder de un partido solamente antes de una palabra char, y el último para que coincida con sólo después de una palabra Char:

(?<!\w)(?:(?=[MDCLXVI])M{0,3}(?:C[MD]|D?C{0,3})(?:X[CL]|L?X{0,3})(?:I[XV]|V?I{0,3})|\d+)(?!\w)

Vea la demostración de expresiones regulares .

En este caso, (?<!\w)actúa como un límite de la palabra que no logra el partido si, inmediatamente a la izquierda de la ubicación actual, existe un char palabra, y (?!\w)actúa como un límite de la palabra que no logra el partido si, inmediatamente a la derecha de la ubicación actual, hay un char palabra.

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=395415&siteId=1
Recomendado
Clasificación