Ich habe ein paar Probleme mit regulären Ausdrücken in Python.
Wie lassen sich alle Zeichen in einer Zeichenkette entfernen, die keine Buchstaben oder Zahlen sind?
Danke!
Ich habe ein paar Probleme mit regulären Ausdrücken in Python.
Wie lassen sich alle Zeichen in einer Zeichenkette entfernen, die keine Buchstaben oder Zahlen sind?
Danke!
[\w]
Übereinstimmungen (alphanumerisch oder Unterstrich).
[\W]
entspricht (nicht (alphanumerisch oder Unterstrich)), was gleichbedeutend ist mit (nicht alphanumerisch und nicht Unterstrich)
Sie benötigen [\W_]
um ALLE nicht alphanumerischen Zeichen zu entfernen.
Bei der Verwendung von re.sub() ist es sehr viel effizienter, wenn Sie die Anzahl der (teuren) Ersetzungen reduzieren, indem Sie [\W_]+
anstatt sie nacheinander zu erledigen.
Jetzt müssen Sie nur noch alphanumerische Zeichen definieren:
str
Objekt, nur ASCII A-Za-z0-9:
re.sub(r'[\W_]+', '', s)
str
Objekt, nur lokal definierte alphanumerische Zeichen:
re.sub(r'[\W_]+', '', s, flags=re.LOCALE)
unicode
Objekt, alle alphanumerischen Zeichen:
re.sub(ur'[\W_]+', u'', s, flags=re.UNICODE)
Beispiele für str
Objekt:
>>> import re, locale
>>> sall = ''.join(chr(i) for i in xrange(256))
>>> len(sall)
256
>>> re.sub('[\W_]+', '', sall)
'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
>>> re.sub('[\W_]+', '', sall, flags=re.LOCALE)
'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
>>> locale.setlocale(locale.LC_ALL, '')
'English_Australia.1252'
>>> re.sub('[\W_]+', '', sall, flags=re.LOCALE)
'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\x83\x8a\x8c\x8e\
x9a\x9c\x9e\x9f\xaa\xb2\xb3\xb5\xb9\xba\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\
xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd8\xd9\xda\xdb\xdc\xdd\xde\
xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\
xf3\xf4\xf5\xf6\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff'
# above output wrapped at column 80
Unicode-Beispiel:
>>> re.sub(ur'[\W_]+', u'', u'a_b A_Z \x80\xFF \u0404', flags=re.UNICODE)
u'abAZ\xff\u0404'
'\W'
ist dasselbe wie [^A-Za-z0-9_]
plus Zeichen mit Akzent aus Ihrem Land.
>>> re.sub('\W', '', 'text 1, 2, 3...')
'text123'
Vielleicht möchten Sie die Leerzeichen beibehalten oder alle Wörter (und Zahlen) haben:
>>> re.findall('\w+', 'my. text, --without-- (punctuation) 123')
['my', 'text', 'without', 'punctuation', '123']
Es gibt auch andere Möglichkeiten, die Sie in Betracht ziehen können, z. B. einfach eine Schleife durch den String zu ziehen und unerwünschte Zeichen zu überspringen, z. B. wenn Sie alle ASCII-Zeichen löschen möchten, die keine Buchstaben oder Ziffern sind.
>>> newstring = [c for c in "a!1#b$2c%3\t\nx" if c in string.letters + string.digits]
>>> "".join(newstring)
'a1b2c3x'
oder verwenden Sie string.translate, um ein Zeichen in ein anderes umzuwandeln oder einige Zeichen zu löschen, z. B.
>>> todelete = [ chr(i) for i in range(256) if chr(i) not in string.letters + string.digits ]
>>> todelete = "".join(todelete)
>>> "a!1#b$2c%3\t\nx".translate(None, todelete)
'a1b2c3x'
Auf diese Weise müssen Sie Folgendes berechnen todelete
Liste einmalig oder todelete
kann einmal fest kodiert werden und überall dort verwendet werden, wo eine Zeichenkette umgewandelt werden soll
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.