Python: sprawdź, czy ciąg zawiera podciąg

Sprawdzenie, czy łańcuch zawiera podłańcuch, pomaga uogólnić warunki i stworzyć bardziej elastyczny kod. Dodatkowo, w zależności od modelu domeny – sprawdzenie, czy ciąg zawiera podciąg, może również pozwolić na wywnioskowanie pól obiektu, jeśli ciąg sam w sobie koduje pole.

W tym przewodniku przyjrzymy się jak sprawdzić, czy ciąg zawiera podciąg w Pythonie.

Połączenia in Operator

Najłatwiejszym sposobem sprawdzenia, czy ciąg Pythona zawiera podłańcuch, jest użycie metody in operator.

Połączenia in operator służy do sprawdzania struktur danych pod kątem członkostwa w Pythonie. Zwraca wartość logiczną (albo True or False). Aby sprawdzić, czy łańcuch zawiera podłańcuch w Pythonie przy użyciu in operatora, po prostu wywołujemy go na superciągu:

fullstring = "StackAbuse"
substring = "tack"

if substring in fullstring:
    print("Found!")
else:
    print("Not found!")

Ten operator jest skrótem do wywoływania obiektu __contains__ metoda, a także dobrze sprawdza się przy sprawdzaniu, czy element istnieje na liście. Warto zauważyć, że tak nie jest bezpieczny dla wartości null, więc jeśli nasz fullstring wskazywał na None, zostałby zgłoszony wyjątek:

TypeError: argument of type 'NoneType' is not iterable

Aby tego uniknąć, najpierw sprawdź, czy wskazuje na None albo nie:

fullstring = None
substring = "tack"

if fullstring != None and substring in fullstring:
    print("Found!")
else:
    print("Not found!")

Połączenia Ciąg.indeks() Metoda wykonania

Typ String w Pythonie ma metodę o nazwie index() którego można użyć do znalezienia początkowego indeksu pierwszego wystąpienia podłańcucha w ciągu.

Jeśli podłańcuch nie zostanie znaleziony, a ValueError zgłaszany jest wyjątek, który można obsłużyć za pomocą bloku try-except-else:

fullstring = "StackAbuse"
substring = "tack"

try:
    fullstring.index(substring)
except ValueError:
    print("Not found!")
else:
    print("Found!")

Ta metoda jest przydatna, jeśli potrzebujesz również znać pozycję podłańcucha, a nie tylko jego istnienie w całym ciągu. Sama metoda zwraca indeks:

print(fullstring.index(substring))

Chociaż – w celu sprawdzenia, czy łańcuch zawiera podłańcuch, jest to szczegółowe podejście.

Metoda String.find().

Klasa String ma inną metodę o nazwie find() co jest wygodniejsze w użyciu niż index(), głównie dlatego, że nie musimy się martwić o obsługę wyjątków.

If find() nie znajdzie dopasowania, zwraca -1, w przeciwnym razie zwraca najbardziej wysunięty na lewo indeks podłańcucha w większym łańcuchu:

Zapoznaj się z naszym praktycznym, praktycznym przewodnikiem dotyczącym nauki Git, zawierającym najlepsze praktyki, standardy przyjęte w branży i dołączoną ściągawkę. Zatrzymaj polecenia Google Git, a właściwie uczyć się to!

fullstring = "StackAbuse"
substring = "tack"

if fullstring.find(substring) != -1:
    print("Found!")
else:
    print("Not found!")

Oczywiście wykonuje to samo wyszukiwanie co index() i zwraca indeks początku podciągu w łańcuchu nadrzędnym:

print(fullstring.find(substring))

Wyrażenia regularne (RegEx)

Wyrażenia regularne zapewniają bardziej elastyczny (choć bardziej złożony) sposób sprawdzania ciągów pod kątem dopasowania wzorców. Dzięki wyrażeniom regularnym możesz przeprowadzać elastyczne i zaawansowane wyszukiwania w znacznie większych przestrzeniach wyszukiwania, zamiast prostych kontroli, jak poprzednio.

Python jest dostarczany z wbudowanym modułem do obsługi wyrażeń regularnych, tzw re, re moduł zawiera funkcję o nazwie search(), którego możemy użyć do dopasowania wzorca podciągu:

from re import search

fullstring = "StackAbuse"
substring = "tack"

if search(substring, fullstring):
    print "Found!"
else:
    print "Not found!"

Ta metoda jest najlepsza, jeśli potrzebujesz bardziej złożonej funkcji dopasowywania, takiej jak dopasowywanie bez rozróżniania wielkości liter, lub jeśli masz do czynienia z dużymi obszarami wyszukiwania. W przeciwnym razie należy unikać komplikacji i wolniejszej prędkości wyrażenia regularnego w przypadku prostych przypadków użycia pasujących do podciągów.

O autorze

Ten artykuł został napisany przez Jacoba Stopaka, konsultanta ds. oprogramowania i programistę, którego pasją jest pomaganie innym w ulepszaniu ich życia za pomocą kodu. Jakub jest twórcą Początkowe zatwierdzenie – strona poświęcona pomocy ciekawskim programistom w nauce kodowania ich ulubionych programów. Wyróżniony projekt pomaga ludziom naucz się Gita na poziomie kodu.

Znak czasu:

Więcej z Nadużycie stosu