Ich habe versucht, einen bestimmten regulären Ausdruck zum Laufen zu bringen, aber ich kann ihn nicht dazu bringen, das zu tun, was ich brauche.
Grundsätzlich möchte ich, dass es nach ROCKET sucht. Die Regex sollte in Groß- oder Kleinschreibung und mit oder ohne Interpunktion mit ROCKET übereinstimmen, jedoch nicht, wenn sie Teil eines anderen Wortes ist. Der reguläre Ausdruck würde also Folgendes auslösen:
rocket
RoCKEt
hi Rocket
This is a rocket.
ROCKET's engine
aber NICHT auf ROCKET auslösen, wenn es in so etwas wie gefunden wird
Rocketeer
Sprocket
Ich habe versucht, es mit einem Regex-Generator online richtig zu machen, aber ich kann es nicht genau zusammenbringen.
Antworten:
Ich empfehle, die MSDN-Kurzreferenz für reguläre Ausdrücke mit einem Lesezeichen zu versehen
Sie möchten eine Übereinstimmung zwischen Groß- und Kleinschreibung für das Wort "Rakete" erzielen, das von nicht alphanumerischen Zeichen umgeben ist. Ein Regex, der funktionieren würde, wäre:
\W*((?i)rocket(?-i))\W*
Es wird nach null oder mehr (*) nicht alphanumerischen (\ W) Zeichen gesucht, gefolgt von einer Version der Rakete ((? I) Rakete (? - i)), bei der die Groß- und Kleinschreibung nicht berücksichtigt wird, gefolgt von null oder mehr (*) *) nicht alphanumerische Zeichen (\ W). Die zusätzlichen Klammern um den Raketenanpassungsbegriff weisen die Übereinstimmung einer separaten Gruppe zu. Das Wort Rakete wird somit in Spielgruppe 1 sein.
UPDATE 1: Matt sagte in dem Kommentar, dass dieser reguläre Ausdruck in Python verwendet werden soll. Python hat eine etwas andere Syntax. Um dasselbe Ergebnis in Python zu erzielen, verwenden Sie diesen regulären Ausdruck und übergeben Sie die
re.IGNORECASE
Option an die Funktioncompile
odermatch
.\W*(rocket)\W*
Auf Regex101 kann dies simuliert werden, indem "i" in das Textfeld neben der Regex-Eingabe eingegeben wird.
UPDATE 2 Ismael hat erwähnt, dass der reguläre Ausdruck nicht ganz korrekt ist, da er möglicherweise mit "1rocket1" übereinstimmt. Er hat nämlich eine viel bessere Lösung veröffentlicht
(?:^|\W)rocket(?:$|\W)
quelle
\W*(rocket)\W*
Streichhölzerlrocketl
. Es sollte sein(?:^|\W)(rocket)(?:$|\W)
(ohne das*
und Sie müssen prüfen, ob es mit dem Anfang und / oder Ende der Zeichenfolge übereinstimmt).Ich denke, die Vorausschau ist in diesem Fall übertrieben, und Sie sollten besser Wortgrenzen mit der
ignorecase
Option verwenden.\brocket\b
Mit anderen Worten, in Python:
quelle
Mit
grep
undsed
können Sie verwenden\<rocket\>
. Mitgrep
der-i
wird Option macht es Groß- und Kleinschreibung ( i gnorieren Fall):Ich kenne keine Möglichkeit, alle
sed
regulären Ausdrücke von Groß- und Kleinschreibung zu unterscheiden, aber es gibt immer den Höhlenmenschen-Weg:quelle
Verwenden Sie die Option Nur nach ganzen Wörtern suchen.
Was Interpunktionen betrifft, können Sie diese erst beantworten, wenn Sie den Geschmack / das Aroma kennen.
Es ist ein sehr alter Thread, der für jemanden veröffentlicht wurde, der ihn später mit einem Bedarf besuchen könnte. Diejenigen, die den Thread erstellt haben, sind möglicherweise zu etwas anderem übergegangen ... Nein?
quelle
whole words only option
benutztgrep
oderphp
? Entschuldigung, aber Ihre Antwort bietet im Vergleich zu anderen Antworten keinen Mehrwert.