Ratkaisujen esikatselu: Välimerkkien poistaminen on nopeinta ja yksinkertaisin sisäänrakennetun kanssastr.translate()ja käännöspöytä, joka on rakennettustring.punctuation. Käytä täydellisiä unicode -välimerkkejäunicodedatatai Unicode-tietoinen regex.
Menetelmä 1: Poista ASCII-välimerkit str.translate (nopea, sisäänrakennettu)
Tämä lähestymistapa kulkee C: ssä konepellin alla ja on tyypillisesti tehokkain ASCII -välimerkkien kannalta. Katso lisätietoja asiakirjoista.
Vaihe 1:Tuodastring.
Lue lisää:Kuinka aktivoida tekstimerkkijonon ensimmäinen kirjain Excelissä
import stringVaihe 2:Rakenna käännöstaulukko, joka poistaa välimerkit.
table = str.maketrans('', '', string.punctuation)Vaihe 3:Käyttää taulukkoa jkn kanssatranslate.
s = "Hello, world! Python 3.12—fun?"
clean = s.translate(table)
print(clean) # Hello world Python 312—funVaihe 4:Vaihda valinnaisesti välimerkit välilyönteillä poistamisen sijasta.
space_table = str.maketrans({ch: ' ' for ch in string.punctuation})
spaced = s.translate(space_table)
normalized = ' '.join(spaced.split())
print(normalized) # Hello world Python 3.12—funHuomautuksia:
string.punctuationKattaa vain ASCII -välimerkit. Se ei sisällä välimerkkejä“ ” — 。 !. Katso viite.- Jos haluat käsitellä muita kuin ASCII-välimerkkejä, käytä menetelmää 3 tai menetelmää 4.
Vaihtoehto 2: Poista ASCII -välimerkit Re.Subilla
Säännölliset lausekkeet ovat ytimekkäitä ja joustavia. Paeta välimerkit kerran, korvaa sitten. Katso Re.sub dokumentaatiossa.
Vaihe 1:Tuodarejastring.
import re, stringVaihe 2:Käännä malli, joka vastaa kaikkia ASCII -välimerkkejä.
pattern = re.compile(r'[%s]' % re.escape(string.punctuation))Vaihe 3:Korvaa vastaa tyhjillä jousilla (tai tilalla).
s = "A test: regex-only, please!"
clean = pattern.sub('', s)
print(clean) # A test regexonly pleaseKärki:wSisältää kirjeitä, numeroita ja alaviivaa jasvastaa välilyöntiä; Molemmat on kuvattu dokumentaatiossa. Jos haluat sallittujen luettelon, voit pitää sanat ja avaruushahmot:re.sub(r'[^ws]', '', s).
Lähestymistapa 3: Poista kaikki Unicode-välimerkit unicodeData-sovelluksilla (sisäänrakennettu)
Tämä lähestymistapa poistaa kaikki hahmot, joiden Unicode -luokka alkaa'P'(välimerkit), ei vain ascii. Katso viite.
Vaihe 1:Tuodaunicodedatajasys.
import unicodedata, sysVaihe 2:Rakenna poistokartta kaikille koodipisteille Unicode -alueella, jonka luokka alkaa'P'.
delete_punct = dict.fromkeys(
i for i in range(sys.maxunicode + 1)
if unicodedata.category(chr(i)).startswith('P')
)Vaihe 3:Käännä merkkijono kartan avulla.
s = "Unicode: 「quotes」 — dashes… 你好,世界!"
clean = s.translate(delete_punct)
print(clean) # Unicode quotes dashes 你好世界Vinkki: Jos haluat myös pudottaa symboleja, kuten valuuttamerkkejä, laajenna suodatin kategorian sisällyttämiseksi'S'.
Tapa 4: Käytä kolmannen osapuolen ”Regex” -moduulia Unicode -ominaisuuksiin
Pythonin sisäänrakennettureei tuep{...}Unicode -ominaisuudet. SeregexPaketti tukee niitä ja voi kohdistaa välimerkit tarkasti käyttämälläp{P}. Asenna se pakettisivulta.
Vaihe 1:Asenna paketti.
pip install regexVaihe 2:Tuo ja koota Unicode -ominaisuuskuvio.
import regex
pattern = regex.compile(r'p{P}+')Vaihe 3:Korvaa välimerkit tyhjällä merkkijonolla tai tilalla.
s = "Mix: ASCII, Unicode… and 「symbols」!"
clean = pattern.sub('', s)
print(clean) # Mix ASCII Unicode and symbolsVinkki: Välimerkkien ja symbolien poistaminen yhdessä, käytär'[p{P}p{S}]+'.
Polku 5: Nopea ymmärtäminen/suodatin (yksinkertainen, hitaampi)
Tämä puhdas python-vaihtoehto on helppo lukea pienille tuloille, mutta se on hitaampi kuin yllä olevat menetelmät.
Vaihe 1:Tuodastring.
import stringVaihe 2:Pidä vain rukoilu merkit.
s = "Keep it simple, okay?"
clean = ''.join(ch for ch in s if ch not in string.punctuation)
print(clean) # Keep it simple okayHuomaa: Tämä riippuu myös vain ASCII: stästring.punctuation.
Käytännölliset vinkit:
- Päätä, onko välimerkki tai korvaa se välilyönteillä; Välilähetysten normalisointi pitää sanan rajat ennallaan.
- Muista, kun käytät Regexiä
wSisältää alaviivan; Jos alaviivat on poistettava, kohdista ne nimenomaisesti. - Erittäin suurille teksteille tai suorituskriittiselle koodille mieluummin
str.translate()Prebuted -taulukossa.
Siinä se - käytästr.translateASCII: n nopeutta varten,unicodedatatai Unicode-tietoinen regex, kun sinun on katettava kaikki välimerkit kielillä.













