Radera tecken som matchar ett mönster

Python:
Radera tecken som matchar ett mönster

Hur man:

import re

# Exempelsträng
text = "Hej, världen! 1234"

# Ta bort alla siffror
inga_siffror = re.sub(r'\d', '', text)
print(inga_siffror)  # Utdata: "Hej, världen! "

# Ta bort skiljetecken
inga_skiljetecken = re.sub(r'[^\w\s]', '', text)
print(inga_skiljetecken)  # Utdata: "Hej världen 1234"

# Ta bort vokaler
inga_vokaler = re.sub(r'[aeiouAEIOU]', '', text)
print(inga_vokaler)  # Utdata: "Hj, vrldn! 1234"

Min anpassade funktion

Jag gör detta tillräckligt ofta för att jag ska ha omstrukturerat det till denna enkla delete() funktion. Det är också en bra demonstration av doctests:

def delete(string: str, regex: str) -> str:
    """
    >>> delete("Hej, världen!", "l")
    'Hej, väden!'

    >>> delete("Hej, världen!", "[a-z]")
    'H, !'
    """
    return re.sub(regex, "", string)

Fördjupning

Praktiken att ta bort tecken som matchar ett mönster i text har djupa rötter inom datavetenskapen, spårandes tillbaka till tidiga Unix-verktyg som sed och grep. I Python tillhandahåller re-modulen denna förmåga, genom att använda reguljära uttryck—ett kraftfullt och mångsidigt verktyg för textbearbetning.

Alternativ till re-modulen inkluderar:

  • Strängmetoder som replace() för enkla fall.
  • Tredjepartsbibliotek som regex för mer komplexa mönster och bättre Unicode-stöd.

Bakom kulisserna, när du använder re.sub(), kompilerar Python-tolken mönstret till en serie bytekoder, behandlade av en tillståndsmaskin som utför mönstermatchning direkt på inmatningstexten. Denna operation kan vara resurskrävande för stora strängar eller komplexa mönster, så prestandaöverväganden är avgörande för bearbetning av stora data.

Se även