Próbuję zbudować regex trochę tak:Regex: ujemne wygląd wyprzedzeniem dwóch meczów
[match-word] ... [exclude-specific-word] ... [match-word]
To wydaje się działać z ujemnym antycypowana, ale biegnę do problemu kiedy mam sprawę tak:
[match-word] ... [exclude-specific-word] ... [match-word] ... [excluded word appears again]
chcę powyższe zdanie, aby dopasować, ale negatywny look-ahead pomiędzy pierwszym i drugim dopasowane słowa „wylewa”, więc drugie słowo nie pasuje.
Spójrzmy na praktyczny przykład.
Nie pasuję do każdego zdania, które ma słowo "i" i słowo "ciasto", ale nie słowo "nienawiść" pomiędzy tymi dwoma słowami. mam te trzy zdania:
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
mam tego regex:
^i(?!.*hate).*pie - have removed the word boundaries for clarity, original is: ^i\b(?!.*\bhate\b).*\bpie\b
który pasuje pierwsze zdanie, ale nie drugi, ponieważ ujemne wygląd wyprzedzeniem skanuje cały ciąg.
Czy istnieje sposób na ograniczenie negatywnego patrzenia w przyszłość, aby był usatysfakcjonowany, jeśli napotka "ciasto", zanim napotka "nienawiść"?
Uwaga: w mojej realizacji, mogą obowiązywać inne warunki naśladujących tego regex (jest zbudowany dynamicznie z wyszukiwarki gramatyka), na przykład:
^i(?!.*hate).*pie.*donuts
obecnie używam JRegex, ale prawdopodobnie może przełączyć do JDK Regex razie potrzeby
Aktualizacja: Zapomniałem wspomnieć coś w moim początkowym pytaniu:
Jest możliwe, że „negatywne konstrukt” istnieje dalej w Sente nce, i chcę dopasować zdanie, jeśli jest to możliwe, nawet jeśli "negatywna" konstrukcja istnieje dalej.
Aby wyjaśnić, spójrz na tych zdaniach:
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
odpowiedź Roba działa doskonale na tym dodatkowym ograniczeniem, więc jestem przyjmując, że jeden.
białe miejsca w regex nie pomaga czytelność, jego tylko mylące – Aprillion
@death Biała spacja jest ważna w regex Pythona, z „gadatliwym” flagi. Mylące dla ciebie, pomocne dla mnie ... mamy różne opinie. (Łatwo to również wyedytować.) – rob
dlaczego więc nie użyłeś białego spacji w twoim pythonie? – Aprillion