En .NET, regex no está organizando capturas como era de esperar. (No voy a llamar esto un error, porque obviamente alguien lo intentó. Sin embargo, no es cómo esperaba que funcionara ni lo encuentro útil.).NET regex no captura en el orden esperado
Esta expresión regular es para ingredientes de recetas (simplificado para el bien de ejemplo):
(?<measurement> # begin group
\s* # optional beginning space or group separator
(
(?<integer>\d+)| # integer
(
(?<numtor>\d+) # numerator
/
(?<dentor>[1-9]\d*) # denominator. 0 not allowed
)
)
\s(?<unit>[a-zA-Z]+)
)+ # end group. can have multiple
Mi cadena: 3 tbsp 1/2 tsp
grupos resultantes y captura:
[medida] [0] = 3 cucharadas
[medida] [] = 1/2 cucharadita
[número entero] [0] = 3
[numtor] [] = 1
[Dentor] [] = 2
[unidad] [0] = cucharada
[unidad] [1 ] = cucharadita
Aviso cómo a pesar de 1/2 tsp
está en la segunda captura, sus partes están en [0]
ya que estos lugares eran previousl y no usado.
¿Hay alguna forma de que todas las partes tengan índices útiles predecibles sin tener que volver a ejecutar cada grupo a través de la expresión regular de nuevo?
'/' no tiene ningún significado especial en expresiones regulares. Algunos sabores lo usan como un delimitador para regex * literales * (JavaScript, por ejemplo), pero en .NET es solo otro personaje; no tienes que escapar de eso. –
Gracias por tomarse el tiempo para responder, pero no necesitaba analizar la expresión regular, solo para mostrar el problema en cuestión. – Dinah