Es sieht so aus, als könnten Sie Folgendes verwenden MAN(?!.*PN)
. Dies entspricht MAN
und verwendet einen negativen Lookahead, um sicherzustellen, dass er nicht von PN
( wie auf rubular.com gesehen ).
Gegeben MAN_PN_MAN_BLEH
findet das obige Muster die zweite MAN
, da es nicht gefolgt wird von PN
. Wenn Sie die gesamte Zeichenkette validieren und sicherstellen wollen, dass es keine MAN.*PN
dann können Sie etwas verwenden wie ^(?!.*MAN.*PN).*MAN.*$
( wie auf rubular.com gesehen ).
Referenzen
Verwandte Fragen
Nicht-Regex-Option
Wenn die Zeichenketten wörtlich übereinstimmen sollen, können Sie auch nach Indizes für das Vorkommen von Teilzeichenketten suchen.
In Python, find
y rfind
geben den niedrigsten bzw. den höchsten Index des Auftretens von Teilstrings zurück.
Um also sicherzustellen, dass string1
auftritt, aber nie gefolgt von string2
und beide Erträge -1
wenn die Zeichenkette nicht gefunden wird. Es sieht also so aus, als könnten Sie einfach auf diese Bedingung testen:
string.rfind(s, string2) < string.find(s, string1)
Dies vergleicht das äußerste linke Vorkommen von string1
und das äußerste rechte Vorkommen von string2
.
- Tritt keines von beiden auf, sind beide
-1
und das Ergebnis ist false
- Si
string1
auftritt, aber string2
nicht, dann ist das Ergebnis true
wie erwartet
- Wenn beides vorkommt, dann ist der ganz rechte
string2
muss sich links von der ganz linken string1
- Das heißt, keine
string1
wird immer gefolgt von string2
API-Verbindungen