2017-03-29 4 views
0

ich die unten Zeichenfolge bereinigen möchten, sondern nur von der \n, \r und extra spaces loszuwerden, aber nicht das Apostroph (') und andere Zeichen wie dash (-) und Kolon (:).Wie eine Zeichenfolge ohne bestimmte Zeichen zu bereinigen

Im Moment verwende ich diesen Code, aber es wird alle Sonderzeichen los.

string = "\n\n\r\n   Scott Hibb's Amazing Whisky Grilled Baby Back Ribs\r\n    \n\n\n\n" 
rx = re.compile('\W+') 
string = rx.sub(' ', string).strip() 
print(string) 

Wie kann ich das tun?

Antwort

1

Die akzeptierte Antwort ist großartig, aber wenn Sie eine etwas allgemeinere Lösung möchten, die Ihnen erlaubt, die explizite Menge von Zeichen anzugeben, die Sie noch entfernen möchten, fügen Sie dem Filter eine Lambda-Funktion hinzu, etwa so.

>>> y = "\n\n\r\n  Scott Hibb's  Amazing Whisky Grilled Baby Back Ribs\r\n    \n\n\n\n" 
>>> ' '.join(filter(lambda x: x not in ['\n', '\r'], y).strip().split()) 
"Scott Hibb's Amazing Whisky Grilled Baby Back Ribs" 

Bitte beachten Sie, dass für Ihr Beispiel explizit die \n und \r in der Lambda-Angabe Overkill wird, weil Streifen() behandelt \n und \r als Leerzeichen aber wenn Sie andere Zeichen entfernen wollte, dann ist dies ein sinnvoller Ansatz. Zum Beispiel würden Sie so zusätzliche Leerzeichen entfernen, die \n und \r entfernen und alle Standardvokale entfernen (a, e, i, o, u).

>>> y = "\n\n\r\n  Scott Hibb's  Amazing Whisky Grilled Baby Back Ribs\r\n    \n\n\n\n" 
>>> ' '.join(filter(lambda x: x.lower() not in ['a', 'e', 'i', 'o', 'u', '\r'], y).strip().split()) 
"Sctt Hbb's mzng Whsky Grlld Bby Bck Rbs" 
0

eine Zeichenklasse verwenden, wie [abc] a, b übereinstimmt, oder c

2

Sie filter() und strip() können \n, \t, \r und extra whitespaces unter Beibehaltung Rest der Charaktere, so etwas zu entfernen:

string = "\n\n\r\n  Scott Hibb's  Amazing Whisky Grilled Baby Back Ribs\r\n    \n\n\n\n" 
print(' '.join(filter(None, string.strip().split()))) 

Dies führt zu:

Scott Hibb's Amazing Whisky Grilled Baby Back Ribs 
Verwandte Themen