Próbowałem uruchomić konkretny regex, ale nie mogę tego zrobić, aby zrobić to, czego potrzebuję.
Zasadniczo chcę, aby szukał ROCKET. Wyrażenie regularne powinno pasować do ROCKET wielkimi lub małymi literami oraz z interpunkcją lub bez, ale nie gdy jest częścią innego słowa. Zatem wyrażenie regularne uruchomi się na jednym z następujących:
rocket
RoCKEt
hi Rocket
This is a rocket.
ROCKET's engine
ale NIE uruchamia się w trybie ROCKET, gdy znajdzie się w czymś takim
Rocketeer
Sprocket
Próbowałem to zrobić poprawnie za pomocą internetowego generatora wyrażeń regularnych, ale nie mogę go dokładnie dopasować.
Odpowiedzi:
Proponuję dodać do zakładek Skrócone omówienie wyrażeń regularnych MSDN
chcesz osiągnąć rozróżnianie wielkości liter w słowie „rakieta” w otoczeniu znaków innych niż alfanumeryczne. Wyrażenie regularne, które zadziałałoby, byłoby:
\W*((?i)rocket(?-i))\W*
Będzie szukał zera lub więcej (*) znaków niealfanumerycznych (\ W), po których nie będzie rozróżniana wielkość liter wersja rakiety ((? I) rakieta (? - i)), a następnie ponownie zero lub więcej ( *) znaki niealfanumeryczne (\ W). Dodatkowe nawiasy wokół terminu dopasowania rakiety przypisują dopasowanie do oddzielnej grupy. Słowo rakieta będzie zatem należeć do grupy meczów 1.
AKTUALIZACJA 1: Matt powiedział w komentarzu, że tego wyrażenia regularnego należy używać w pythonie. Python ma nieco inną składnię. Aby osiągnąć ten sam wynik w pythonie, użyj tego wyrażenia regularnego i przekaż
re.IGNORECASE
opcję do funkcjicompile
lubmatch
.\W*(rocket)\W*
Na Regex101 można to zasymulować, wprowadzając „i” w polu tekstowym obok wejścia wyrażenia regularnego.
AKTUALIZACJA 2 Ismael wspomniał, że wyrażenie regularne nie jest całkiem poprawne, ponieważ może pasować do „1rocket1”. Opublikował znacznie lepsze rozwiązanie, a mianowicie
(?:^|\W)rocket(?:$|\W)
źródło
\W*(rocket)\W*
meczelrocketl
. Powinien być(?:^|\W)(rocket)(?:$|\W)
(bez*
i musisz sprawdzić, czy pasuje on do początku i / lub końca łańcucha).Myślę, że w tym przypadku przewidywania są nadmierne, a lepiej byłoby użyć granic słów z
ignorecase
opcją,\brocket\b
Innymi słowy, w python:
źródło
Za pomocą
grep
ised
możesz używać\<rocket\>
. Zgrep
The-i
opcja pozwoli wielkości liter ( I gnore przypadek):Nie wiem, jak sprawić, by wszystkie
sed
wyrażenia regularne nie uwzględniały wielkości liter, ale zawsze istnieje sposób jaskiniowca:źródło
Użyj opcji Szukaj tylko całych słów.
Jeśli chodzi o interpunkcje, nie możesz odpowiedzieć, dopóki nie poznasz smaku / smaku.
To bardzo stary wątek, więc opublikowany dla kogoś, kto może odwiedzić z potrzebą, później. Ci, którzy stworzyli wątek, mogli przenieść się na coś innego ... Nie?
źródło
whole words only option
używagrep
lubphp
? Przepraszamy, ale twoja odpowiedź nie daje żadnej wartości dodanej w porównaniu z innymi odpowiedziami.