Verwijder alle speciale tekens, leestekens en spaties uit string

Ik moet alle speciale tekens, leestekens en spaties uit een tekenreeks verwijderen, zodat ik alleen letters en cijfers heb.


Antwoord 1, autoriteit 100%

Dit kan zonder regex:

>>> string = "Special $#! characters   spaces 888323"
>>> ''.join(e for e in string if e.isalnum())
'Specialcharactersspaces888323'

U kunt str.isalnum:

S.isalnum() -> bool
Return True if all characters in S are alphanumeric
and there is at least one character in S, False otherwise.

Als je erop staat regex te gebruiken, zullen andere oplossingen het prima doen. Houd er echter rekening mee dat als het kan worden gedaan zonder een reguliere expressie te gebruiken, dat de beste manier is om dit aan te pakken.


Antwoord 2, autoriteit 71%

Hier is een regex die overeenkomt met een reeks tekens die geen letters of cijfers zijn:

[^A-Za-z0-9]+

Hier is het Python-commando om een regex-vervanging uit te voeren:

re.sub('[^A-Za-z0-9]+', '', mystring)

Antwoord 3, autoriteit 15%

Kortere weg:

import re
cleanString = re.sub('\W+','', string )

Als u spaties tussen woorden en cijfers wilt, vervangt u ” door ‘ ‘


Antwoord 4, autoriteit 9%

Nadat ik dit had gezien, was ik geïnteresseerd in het uitbreiden van de gegeven antwoorden door erachter te komen welke in de kortste tijd wordt uitgevoerd, dus ik ging door en controleerde enkele van de voorgestelde antwoorden met timeittegen twee van de voorbeeldstrings:

  • string1 = 'Special $#! characters spaces 888323'
  • string2 = 'how much for the maple syrup? $20.99? That s ricidulous!!!'

Voorbeeld 1

'.join(e for e in string if e.isalnum())

  • string1– Resultaat: 10.7061979771
  • string2– Resultaat: 7.78372597694

Voorbeeld 2

import re
re.sub('[^A-Za-z0-9]+', '', string)

  • string1– Resultaat: 7.10785102844
  • string2– Resultaat: 4.12814903259

Voorbeeld 3

import re
re.sub('\W+','', string)

  • string1– Resultaat: 3.11899876595
  • string2– Resultaat: 2.78014397621

De bovenstaande resultaten zijn een product van het laagste geretourneerde resultaat van een gemiddelde van: repeat(3, 2000000)

Voorbeeld 3kan 3x sneller zijn dan Voorbeeld 1.


Antwoord 5, autoriteit 6%

Python 2.*

Ik denk dat gewoon filter(str.isalnum, string)werkt

In [20]: filter(str.isalnum, 'string with special chars like !,#$% etcs.')
Out[20]: 'stringwithspecialcharslikeetcs'

Python 3.*

In Python3 zou de functie filter( )een itereerbaar object retourneren (in plaats van een string in tegenstelling tot hierboven). Men moet weer meedoen om een string uit itertable te halen:

''.join(filter(str.isalnum, string)) 

of om listdoor te geven voor gebruik (niet zeker, maar kan een beetje snel zijn)

''.join([*filter(str.isalnum, string)])

opmerking: uitpakken in [*args]geldig vanaf Python >= 3,5


Antwoord 6, autoriteit 6%

#!/usr/bin/python
import re
strs = "how much for the maple syrup? $20.99? That's ricidulous!!!"
print strs
nstr = re.sub(r'[?|$|.|!]',r'',strs)
print nstr
nestr = re.sub(r'[^a-zA-Z0-9 ]',r'',nstr)
print nestr

u kunt meer speciaal teken toevoegen en dat zal worden vervangen door ” betekent niets, d.w.z. ze zullen worden verwijderd.


Antwoord 7, autoriteit 4%

Anders dan iedereen deed bij het gebruik van regex, zou ik proberen elk teken dat nietis wat ik wil uit te sluiten, in plaats van expliciet op te sommen wat ik niet wil.

Als ik bijvoorbeeld alleen tekens van ‘a tot z’ (hoofdletters en kleine letters) en cijfers wil, zou ik al het andere uitsluiten:

import re
s = re.sub(r"[^a-zA-Z0-9]","",s)

Dit betekent “vervang elk teken dat geen getal is, of een teken in het bereik ‘a tot z’ of ‘A tot Z’ door een lege tekenreeks”.

Als je het speciale teken ^op de eerste plaats van je regex invoegt, krijg je de ontkenning.

Extra tip: als je het resultaat ook kleine lettersmoet maken, kun je de regex nog sneller en gemakkelijker maken, zolang je nu geen hoofdletters vindt.

import re
s = re.sub(r"[^a-z0-9]","",s.lower())

Antwoord 8, autoriteit 3%

string.punctuation bevat de volgende tekens:

‘!”#$%&\'()*+,-./:;<=>?@[\]^_`{|}~’

U kunt de functies vertalen en maketrans gebruiken om leestekens toe te wijzen aan lege waarden (vervangen)

import string
'This, is. A test!'.translate(str.maketrans('', '', string.punctuation))

Uitvoer:

'This is A test'

Antwoord 9, autoriteit 2%

s = re.sub(r"[-()\"#/@;:<>{}`+=~|.!?,]", "", s)

Antwoord 10, autoriteit 2%

Ervan uitgaande dat u een regex wilt gebruiken en u wilt/hebt Unicode-cognisante 2.x-code die 2-to3-ready is:

>>> import re
>>> rx = re.compile(u'[\W_]+', re.UNICODE)
>>> data = u''.join(unichr(i) for i in range(256))
>>> rx.sub(u'', data)
u'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\xaa\xb2 [snip] \xfe\xff'
>>>

Antwoord 11

De meest algemene benadering is het gebruik van de ‘categorieën’ van de unicodedata-tabel die elk afzonderlijk teken classificeert. bijv. de volgende code filtert alleen afdrukbare tekens op basis van hun categorie:

import unicodedata
# strip of crap characters (based on the Unicode database
# categorization:
# http://www.sql-und-xml.de/unicode-database/#kategorien
PRINTABLE = set(('Lu', 'Ll', 'Nd', 'Zs'))
def filter_non_printable(s):
    result = []
    ws_last = False
    for c in s:
        c = unicodedata.category(c) in PRINTABLE and c or u'#'
        result.append(c)
    return u''.join(result).replace(u'#', u' ')

Kijk naar de opgegeven url hierboven voor alle gerelateerde categorieën. U kunt natuurlijk natuurlijk filteren
door de interpunctiecategorieën.


Antwoord 12

Gebruik Vertaal:

import string
def clean(instr):
    return instr.translate(None, string.punctuation + ' ')

Waarde: alleen werkt op ASCII-snaren.


Antwoord 13

Voor andere talen zoals Duits, Spaans, Deens, Frans enz. Die speciale tekens (zoals Duits “Umlaute” bevatten als ü, ä, ö) Voeg deze eenvoudig toe aan de ReGEX-zoekreeks:

Voorbeeld voor Duits:

re.sub('[^A-ZÜÖÄa-z0-9]+', '', mystring)

Antwoord 14

import re
my_string = """Strings are amongst the most popular data types in Python. We can create the strings by enclosing characters in quotes. Python treats single quotes the 

hetzelfde als dubbele aanhalingstekens. “” “

# if we need to count the word python that ends with or without ',' or '.' at end
count = 0
for i in text:
    if i.endswith("."):
        text[count] = re.sub("^([a-z]+)(.)?$", r"\1", i)
    count += 1
print("The count of Python : ", text.count("python"))

Antwoord 15

Hiermee wordt alle niet-alfanumerieke tekens behalve spaties verwijderd.

string = "Special $#! characters   spaces 888323"
''.join(e for e in string if (e.isalnum() or e.isspace()))

Spaties voor speciale tekens 888323


Antwoord 16

Hiermee worden alle speciale tekens, leestekens en spaties uit een tekenreeks verwijderd en worden alleen cijfers en letters weergegeven.

import re
sample_str = "Hel&&lo %% Wo$#rl@d"
# using isalnum()
print("".join(k for k in sample_str if k.isalnum()))
# using regex
op2 = re.sub("[^A-Za-z]", "", sample_str)
print(f"op2 = ", op2)
special_char_list = ["$", "@", "#", "&", "%"]
# using list comprehension
op1 = "".join([k for k in sample_str if k not in special_char_list])
print(f"op1 = ", op1)
# using lambda function
op3 = "".join(filter(lambda x: x not in special_char_list, sample_str))
print(f"op3 = ", op3)

Antwoord 17

import re
abc = "askhnl#$%askdjalsdk"
ddd = abc.replace("#$%","")
print (ddd)

en u zult uw resultaat zien als

‘askhnlaskdjalsdk

Other episodes