Poista välimerkit Python -merkkijonosta

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 string

Vaihe 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—fun

Vaihe 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—fun

Huomautuksia:

  • 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, string

Vaihe 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 please

Kä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, sys

Vaihe 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 regex

Vaihe 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 symbols

Vinkki: 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 string

Vaihe 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 okay

Huomaa: 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 mieluumminstr.translate()Prebuted -taulukossa.

Siinä se - käytästr.translateASCII: n nopeutta varten,unicodedatatai Unicode-tietoinen regex, kun sinun on katettava kaikki välimerkit kielillä.

Related Posts