Ich versuche, dieses CodingBat-Problem zu lösen:
Gibt true zurück, wenn die angegebene Zeichenfolge eine Darstellung von "xyz" enthält, wobei der xyz nicht direkt ein Punkt (.) vorausgeht. Also "xxyz" zählt aber "x.xyz" nicht.
xyzThere ("abcxyz") → wahres
xyzThere ("abc.xyz") → falsches
xyzThere ("xyz.abc") → wahr
Ich versuche, dies mit einer Regex zu lösen, aber ich bin nicht sicher, wie man where the xyz is not directly preceeded by a period
-Anforderung behandelt.
Meine Lösung für das Problem ohne die Einschränkung ist dies:
%Vor%Irgendeine Idee, wie man diese Beschränkung mit einer Regex behandelt?
Eine negierte Zeichenklasse sollte den Trick machen: str.matches(".*(?:^|[^.])xyz.*")
Hier verwenden wir eine nicht einfangende Gruppe (?:^|[^.])
, um sicherzustellen, dass wir entweder am Anfang der Zeichenfolge ^
oder an einer beliebigen Position, die keine Periode [^.]
Ich habe diese Lösung persönlich benutzt, aber es gibt eine ganze Reihe anderer Varianten:
%Vor% Ich stelle nur sicher, dass, wenn vor xyz
etwas ist, der Punkt .
nicht unmittelbar vorangeht.
Sie können auch eine Look-Behind-Lösung schreiben:
%Vor% (?<! )
part ist negativ lookbehind und \.
(literal period) ist das Muster, gegen das wir prüfen möchten.