que estoy tratando de construir una expresión regular algo como esto:expresiones regulares: negativa de preanálisis entre dos partidos
[match-word] ... [exclude-specific-word] ... [match-word]
Esto parece funcionar con una visión hacia adelante negativo, pero estoy corriendo en un problema cuando tengo un caso como este:
[match-word] ... [exclude-specific-word] ... [match-word] ... [excluded word appears again]
quiero la frase anterior a la altura, pero el aspecto de la ventaja negativa entre la primera y la segunda palabra que concordaba "se derrama sobre" lo que la segunda palabra nunca es igualada.
Veamos un ejemplo práctico.
Quiero hacer coincidir cada oración que tiene la palabra "i" y la palabra "pastel", pero no la palabra "odio" entre esas dos palabras. tengo estas tres frases:
i sure like eating pie, but i love donuts <- Want to match this
i sure like eating pie, but i hate donuts <- Want to match this
i sure hate eating pie, but i like donuts <- Don't want to match this
tengo esta expresión regular:
^i(?!.*hate).*pie - have removed the word boundaries for clarity, original is: ^i\b(?!.*\bhate\b).*\bpie\b
que coincide con la primera frase, pero no la segunda, porque el aspecto negativo de la ventaja escanea toda la cadena.
¿Hay alguna manera de limitar el aspecto negativo anticipado, de modo que quede satisfecho si encuentra "pie" antes de encontrar "odio"?
Nota: en mi aplicación, puede haber otros términos que siguen a esta expresión regular (que está construido de forma dinámica a partir de un motor de búsqueda de la gramática), por ejemplo:
^i(?!.*hate).*pie.*donuts
actualmente estoy usando JRegex, pero probablemente podría cambiar a JDK expresión regular si es necesario
actualización: me olvidó mencionar algo en mi pregunta inicial:
es posible que el "constructo negativo" existe más en la sente nce, y quiero hacer coincidir la oración si es posible, incluso si el constructo "negativo" existe más arriba.
para aclarar, un vistazo a estas frases:
i sure like eating pie, but i love donuts <- Want to match this
i sure like eating pie, but i hate donuts <- Want to match this
i sure hate eating pie, but i like donuts <- Don't want to match this
i sure like eating pie, but i like donuts and i hate making pie <- Do want to match this
respuesta de Rob funciona perfectamente para esta restricción adicional, por lo que estoy aceptando que uno.
espacio en blanco en la expresión regular no ayuda a la legibilidad, su único confuso – Aprillion
@death El espacio en blanco es válido en una expresión regular pitón, con la bandera "prolija". Confundir para usted, útil para mí ... tenemos diferentes opiniones. (También es fácil de editar). – rob
¿por qué no usaste el espacio en blanco en tu ejemplo de python? – Aprillion