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
- Python
re
-modulens dokumentation: Officiella dokument för reguljära uttryck i Python. - Regular-Expressions.info: En omfattande guide till reguljära uttryck.
- Real Python-tutorial om regex: Verkliga tillämpningar av reguljära uttryck i Python.