Na przykład, gdy piszesz opiekunów do adresu URL (i Boże, pomóż ci, jeśli piszesz jeden od zera), często chcesz wyświetlić ten sam wynik bez względu na to, że „/”/”w adresie URL. mi.g https: // przykład.com/user/settings/i https: // przykład.COM/Użytkownik/Ustawienia powinny wskazywać na tę samą stronę, pomimo końcowego „/”.
Nie możesz jednak zignorować wszystkich cięć do przodu, na przykład:
Więc wymyślasz zasadę, taką jak: „Zignoruj tylko cięcia do przodu, a następnie puste miejsce.”A jeśli chcesz, możesz zakodować tę regułę za pomocą serii instrukcji IF-Else. Ale to będzie dość szybko. Możesz napisać funkcję z napisem CleanURl (), która może to dla Ciebie zamknąć. Ale wszechświat wkrótce zacznie rzucić w ciebie więcej krzywych. Wkrótce zobaczysz, że piszesz funkcje dla Cleanheaders (), processlog () itp. Lub możesz użyć wyrażenia regularnego, gdy wymagane jest jakiekolwiek dopasowanie wzoru.
Zanim przejdziemy do szczegółów wyrażeń regularnych, warto wspomnieć o modelu, który większość systemów ma dla strumieni tekstu. Oto krótkie (niekompletne) podsumowanie tego:
Ze względu na prostotę chcę, żebyś wyobrażał sobie, że plik składa się z linii kończących się nową postacią. Łamiemy ten plik na poszczególne linie (lub struny), które kończą się nową linią lub normalnym znakiem (dla ostatniej linii).
Regexs i String
Regex nie ma nic wspólnego z plikami. Wyobraź to sobie jako czarne skrzynkę, która może traktować jako wprowadzenie dowolnego dowolnego ciągu dowolnej (skończonej) długości, a gdy dotrze do końca tego ciągu, może albo:
Pomimo jego czarnej natury, dodam jeszcze kilka ograniczeń do tego maszyny. Regex odczytuje ciąg sekwencyjnie, od lewej do prawej i czyta tylko jedną postać na raz. Więc ciąg „Linuxhint” z przeczytaniem jako:
'L "i" n "u" x "h" i "n" t' [od lewej do prawej]
Zacznijmy proste
Najbardziej uproszczonym rodzajem regularności byłoby wyszukiwanie i dopasowanie ciągu „C”. Wyrażenie regularne to po prostu „c”. Całkiem trywialne. Sposób, aby to zrobić w Python, wymagałby najpierw zaimportowania Odnośnie moduł do wyrażeń regularnych.
>>> Importuj ponownie
Następnie używamy funkcji ponownie.szukaj(wzór, ciąg) Gdzie wzór jest naszym wyrażeniem regularnym i strunowy w ciągu wejściowego, w którym szukamy wzoru.
>>> re.Wyszukaj („c”, „to zdanie ma w nim celowe C”)Funkcja przyjmuje wzór „C”, szuka go w ciągu wejściowego i drukuje lokalizację (rozpiętość) gdzie znaleziono wspomniany wzór. Ta część ciągu, ta podłoże pasuje do naszego wyrażenia regularnego. Gdyby nie znaleziono takiego dopasowania Nic obiekt.
Podobnie możesz wyszukać wzór „wyrażenie regularne” w następujący sposób:
>>> re.Wyszukaj („wyrażenie regularne”, „możemy użyć wyrażeń regularnych do wyszukiwania wzorców.”)Odnośnie.wyszukiwanie (), re.mecz () i re.FullMatch ()
Trzy przydatne funkcje z modułu Re obejmują:
Odnośnie.szukaj(wzór, ciąg)
Odwraca to podjazd, który pasuje do wzoru, jak widzieliśmy powyżej. Jeśli nie znaleziono żadnego dopasowania, wtedy Nic jest zwrócony. Jeśli wiele podłoża jest zgodnych z danym wzorem, zgłoszono tylko pierwsze występowanie.
Odnośnie.mecz(wzór, ciąg)
Ta funkcja próbuje dopasować dostarczony wzór od początku łańcucha. Jeśli napotka przerwę gdzieś w połowie drogi, powraca Nic.
Na przykład,
>>> re.mecz („Joh”, „John Doe”)Gdzie jako ciąg „mam na imię John Doe” nie jest dopasowany, a zatem Nic jest zwrócony.
>>> wydrukuj (ponownie.mecz („Joh”, „My Name Is John Doe”))Odnośnie.FullMatch (wzór, ciąg)
Jest to bardziej surowsze niż zarówno powyższe, jak i próbuje znaleźć dokładne dopasowanie wzoru w ciągu, w przeciwnym razie domyślnie Nic.
>>> wydrukuj (ponownie.FullMatch („Joh”, „Joh”))Będę używać tylko Odnośnie.szukaj() funkcja w pozostałej części tego artykułu. Ilekroć mówię, że Regex akceptuje ten sznurek, oznacza to, że Athe Odnośnie.szukaj() Funkcja znalazła pasującą podłoże w ciągu wejściowego i zwróciła to zamiast tego Nicobiekt.
Znaki specjalne
Wyrażenia regularne, takie jak „John” i „C”, nie są zbytnio użyteczne. Potrzebujemy znaków specjalnych, co określone w kontekście wyrażeń regularnych. Oto kilka przykładów:
Jest o wiele więcej do omówienia, ale polecam uczyć się, jak idziesz zamiast przeciążać mózg z wieloma niejasnymi symbolami i skrzynkami. W razie wątpliwości dokumenty Pythona są wielką pomocą, a teraz wiesz wystarczająco dużo, aby łatwo śledzić dokumenty.
Jeśli chcesz zobaczyć wizualną interpretację swojego wyrażenia, możesz odwiedzić Debuggex. Ta strona generuje widok regex w czasie rzeczywistym i pozwala przetestować ją na różnych ciągach wejściowych.
Aby dowiedzieć się więcej o teoretycznym aspekcie wyrażeń regularnych, możesz chcieć spojrzeć na pierwsze kilka rozdziałów wprowadzenia do teorii obliczeń autorstwa Michaela Sipsera. Jest bardzo łatwy do naśladowania i pokazuje znaczenie wyrażeń regularnych jako podstawowej koncepcji samej obliczeń!