Usuwanie znaków pasujących do wzorca

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ż