2016-05-18 9 views
0

Ich habe Strings wie "- memphis , tn! ", "~~~memphis,tn", ":) memphis , tn (:", ". - memphis,tn - .", "memphis tn?". Ich möchte jede dieser Zeichenfolgen so reinigen, dass jede Zeichenfolge "memphis,tn" wird. Momentan verwende ich den folgenden Code, aber gibt es dafür einen effizienteren Weg? Vielleicht mit Regex?Reinigung weg Symbole/Leerzeichen effizient

Beachten Sie, dass ich derzeit das Problem habe, dass die Reihenfolge der Sonderzeichen das Endergebnis beeinflusst. Zum Beispiel gibt ". - memphis,tn - ." das richtige Ergebnis, während "- . memphis,tn . -" nicht. Dies ist nicht beabsichtigt. Wenn es als Nebeneffekt behoben werden könnte, wäre das großartig!

Die Zeichenfolgen sind reines ASCII und ich könnte versucht sein, mehr Sonderzeichen als die folgenden zu entfernen.

Bearbeiten: Sorry, ich sollte beachten, dass nicht alle Zeichenfolgen das "x, y" -Format haben. Auch Strings wie "- New York City -" oder "* Texas *" sollten aufgeräumt werden.

# remove emoticons 
smileys = [":)",":\\",":(",";)", 
      "(:","\\:","):","(;"] 
for s in smileys: 
    loc = loc.replace(s, '') 

# cleaning whitespace uses 
loc = ' '.join(loc.split()) 
loc = loc.strip() 
loc = loc.replace(' ,', ',') 
loc = loc.replace(', ', ',') 
loc = loc.replace(' .', '.') 
loc = loc.replace('. ', '.') 

# clean special symbols off the sides 
symbols = '.,!-#~*^[email protected]" ' 
loc = loc.strip(symbols) 
+0

verwenden, was für "" - New York City - "' ausgegeben wird? – rock321987

+0

"New York City" – pir

+0

Wie ersetzen Sie die Leerzeichen in ':) Memphis, tn (:'? – rock321987

Antwort

3

können Sie verwenden

','.join(y for y in re.split("[- ,!~?]", x) if y) 
           ^^ 
           || 
        List all the symbols here 

Python-Code

y = ["- memphis , tn! ", "~~~memphis,tn", ":) memphis , tn (:", ". - memphis,tn - .", "memphis tn?", ". - memphis,tn - .", "- . memphis,tn . -"] 

for x in y: 
    print(','.join(y for y in re.split("[- ,!~?:;)(.]", x) if y)) 

Ideone Demo

Wenn Sie irgendein anderes Symbol als alphanumer entfernen möchten ic, können Sie

print(','.join(y for y in re.split("_|[^\w]", x) if y)) 
+1

'if len (y)> 0 'kann vereinfacht werden, nur wenn 'y', da die Boolesche Zahl von Sequenzen mit der Länge Null" False "ist und jede Sequenz mit dem darin enthaltenen Text True ist. –

+0

@ TadhgMcDonald-Jensen yup..updated – rock321987