Tengo esta expresión regular de.NET:
^(?<prefix>("[^"]*"))\s(?<attrgroup>(\([^\)]*\)))\s(?<suffix>("[^"]*"))$
Coincide correctamente con las siguientes cadenas:
"some prefix" ("attribute 1" "value 1") "some suffix"
"some prefix" ("attribute 1" "value 1" "attribute 2" "value 2") "some suffix"
Falla en...
"some prefix" ("attribute 1" "value (fail) 1") "some suffix"
...debido al paréntesis derecho después de "fail".
¿Cómo puedo modificar mi expresión regular para que el attrgroup
grupo de coincidencias termine conteniendo " ("attribute 1" "value (fail) 1")
"? Lo he estado mirando durante demasiado tiempo y necesito algunos ojos nuevos. ¡Gracias!
Editar: attrgroup
nunca contendrá nada más que pares de cadenas entre comillas dobles.
Solución del problema
mi suposición no probada:
^(?<prefix>("[^"]*"))\s(?<attrgroup>(\(("[^"]*")(\s("[^"]*")*)**\)))\s(?<suffix>("[^"]*"))$
por la presente he reemplazado
[^\)]*
con
("[^"]*")(\s("[^"]*")*)*
Asumí que todo lo que está entre paréntesis está entre comillas dobles o es un espacio en blanco.
Si quieres saber cómo se me ocurrió esto, lee Dominar las expresiones regulares.
PD. si estoy en lo correcto, esto también validará el grupo de atributos como pares de cadenas entrecomilladas.
No hay comentarios:
Publicar un comentario