Ich habe versucht, einen bestimmten regulären Ausdruck zum Laufen zu bringen, aber ich schaffe es nicht, das zu tun, was ich brauche.
Im Grunde möchte ich, dass es nach ROCKET sucht. Der reguläre Ausdruck sollte ROCKET in Groß- oder Kleinbuchstaben und mit oder ohne Satzzeichen abgleichen, aber nicht, wenn es Teil eines anderen Wortes ist. Der reguläre Ausdruck würde also bei Folgendem ausgelöst:
rocket
RoCKEt
hi Rocket
This is a rocket.
ROCKET's engine
aber NICHT auf ROCKET auslösen, wenn es in etwas gefunden wird wie
Rocketeer
Sprocket
Ich habe versucht, es mithilfe eines Online-Regex-Generators richtig zu machen, aber ich bekomme keine genaue Übereinstimmung hin.
Antwort1
Ich empfehle, ein Lesezeichen fürKurzreferenz für reguläre Ausdrücke von MSDN
Sie möchten eine Groß-/Kleinschreibungsunabhängige Übereinstimmung für das Wort „Rocket“ erreichen, das von nicht-alphanumerischen Zeichen umgeben ist. Ein regulärer Ausdruck, 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 Groß-/Kleinschreibungsunabhängigen Version von Rakete ( (?i)rocket(?-i) ), gefolgt wiederum von null oder mehr (*) nicht alphanumerischen Zeichen (\W). Die zusätzlichen Klammern um den mit Rakete übereinstimmenden Begriff ordnen die Übereinstimmung einer separaten Gruppe zu. Das Wort Rakete befindet sich somit in Übereinstimmungsgruppe 1.
UPDATE 1:
Matt sagte in dem Kommentar, dass dieser reguläre Ausdruck in Python verwendet werden soll. Python hat eine etwas andere Syntax. Um in Python dasselbe Ergebnis zu erzielen, verwenden Sie diesen regulären Ausdruck und übergeben Sie die re.IGNORECASE
Option an die Funktion compile
„oder“ match
.
\W*(rocket)\W*
AnRegex101Dies kann simuliert werden, indem Sie „i“ in das Textfeld neben der Regex-Eingabe eingeben.
AKTUALISIERUNG 2Ismael hat erwähnt, dass der reguläre Ausdruck nicht ganz korrekt ist, da er möglicherweise auf "1rocket1" zutrifft. Er hat eine viel bessere Lösung gepostet, nämlich
(?:^|\W)rocket(?:$|\W)
Antwort2
Ich denke, die Vorausschau ist in diesem Fall übertrieben, und Sie wären besser dran, wenn Sie Wortgrenzen mit der ignorecase
Option verwenden würden,
\brocket\b
Mit anderen Worten, in Python:
>>> x="rocket's"
>>> y="rocket1."
>>> c=re.compile(r"\brocket\b",re.I) # with the ignorecase option
>>> c.findall(y)
[]
>>> c.findall(x)
['rocket']
Antwort3
Mit grep
und sed
können Sie verwenden \<rocket\>
. Mit wird grep
die Groß-/Kleinschreibung nicht beachtet (-i
ichGroß-/Kleinschreibung ignorieren):
grep -i '\<rocket\>'
Ich kenne keine Möglichkeit, bei allen sed
regulären Ausdrücken die Groß-/Kleinschreibung außer Acht zu lassen, aber es gibt immer noch die Höhlenmenschenmethode:
sed -n '/\<[Rr][Oo][Cc][Kk][Ee][Tt]\>/p'
Antwort4
Ich denke, Sie können so etwas verwenden, um das gewünschte Wort anzugeben:
/^(rocket|RoCKEt)$/g