Python:
Usuwanie znaków pasujących do wzorca
Jak to zrobić:
import re
# Przykładowy ciąg znaków
text = "Hello, World! 1234"
# Usuwanie wszystkich cyfr
bez_cyfr = re.sub(r'\d', '', text)
print(bez_cyfr) # Wynik: "Hello, World! "
# Usuwanie znaków interpunkcyjnych
bez_interpunkcji = re.sub(r'[^\w\s]', '', text)
print(bez_interpunkcji) # Wynik: "Hello World 1234"
# Usuwanie samogłosek
bez_samoglosek = re.sub(r'[aeiouAEIOU]', '', text)
print(bez_samoglosek) # Wynik: "Hll, Wrld! 1234"
Moja własna funkcja
Ponieważ robię to dość często, zrefaktoryzowałem to do tej prostej funkcji delete()
. Jest to także dobra demonstracja doctestów:
def delete(string: str, regex: str) -> str:
"""
>>> delete("Hello, world!", "l")
'Heo, word!'
>>> delete("Hello, world!", "[a-z]")
'H, !'
"""
return re.sub(regex, "", string)
Dogłębna analiza
Praktyka usuwania znaków zgodnych z wzorcem w tekście ma głębokie korzenie w informatyce, sięgające wczesnych narzędzi Unix takich jak sed
i grep
. W Pythonie moduł re
zapewnia tę możliwość, wykorzystując wyrażenia regularne - potężne i wszechstronne narzędzie do przetwarzania tekstu.
Alternatywy dla modułu re
obejmują:
- Metody ciągów znaków, takie jak
replace()
, dla prostych przypadków. - Biblioteki innych firm, jak
regex
, dla bardziej złożonych wzorców i lepszego wsparcia Unicode.
W głębi, kiedy używasz re.sub()
, interpreter Pythona kompiluje wzorzec do serii bajtkodów, przetwarzanych przez maszynę stanów, która wykonuje dopasowanie wzorca bezpośrednio na wejściowym tekście. Operacja ta może być zasobożerna dla dużych ciągów znaków lub złożonych wzorców, więc rozważenia dotyczące wydajności są kluczowe przy przetwarzaniu dużych ilości danych.
Zobacz również
- Dokumentacja modułu
re
Pythona: Oficjalne dokumenty dla wyrażeń regularnych w Pythonie. - Regular-Expressions.info: Kompleksowy przewodnik po wyrażeniach regularnych.
- Samouczek Real Python na temat regex: Praktyczne zastosowania wyrażeń regularnych w Pythonie.