sto cercando di costruire un'espressione regolare un po 'come questo:Regex: negativo look-ahead tra due partite
[match-word] ... [exclude-specific-word] ... [match-word]
Questo sembra di lavorare con un negativo look-ahead, ma sto correndo in un problema quando ho un caso come questo:
[match-word] ... [exclude-specific-word] ... [match-word] ... [excluded word appears again]
voglio la frase di cui sopra per abbinare, ma il negativo look-ahead tra la prima e la seconda parola abbinato "cadute oltre", così la seconda parola è mai abbinato.
Diamo un'occhiata a un esempio pratico.
I wan't per abbinare ogni frase che ha la parola "i" e la parola "torta", ma non la parola "odio" tra queste due parole. Ho questi tre frasi:
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
ho questo regex:
^i(?!.*hate).*pie - have removed the word boundaries for clarity, original is: ^i\b(?!.*\bhate\b).*\bpie\b
che corrisponde al primo periodo, ma non la seconda, perché il negativo look-ahead analizza l'intera stringa.
C'è un modo per limitare l'anteprima negativa, in modo che sia soddisfatto se incontra la "torta" prima che incontri "odio"?
Nota: nel mio implementazione, ci possono essere altri termini che seguono questo regex (che è costruito dinamicamente da un motore di ricerca di grammatica), per esempio:
^i(?!.*hate).*pie.*donuts
Attualmente sto usando JRegex, ma potrebbe probabilmente passare al JDK Regex se necessario
Aggiornamento: ho dimenticato di dire qualcosa nella mia domanda iniziale:
E 'possibile che il "costrutto negativo" esiste ulteriormente nel Sente nce, e voglio abbinare la frase se è possibile anche se il costrutto "negativo" esiste più in alto.
Per chiarire, un'occhiata a queste frasi:
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
risposta di Rob funziona perfettamente per questo vincolo in più, quindi sto accettando che uno.
spazio bianco nel regex non aiuta la leggibilità, la sua unica fonte di confusione – Aprillion
@death spazio bianco è valida in una regex pitone, con il flag "verbose". Confondendo per te, utile per me ... abbiamo opinioni diverse. (È anche facile da modificare.) – rob
quindi perché non hai usato lo spazio bianco nel tuo esempio python? – Aprillion