2013-05-15 10 views
73

Grundsätzlich möchte ich den Benutzer eine Zeichenfolge in die Konsole eingeben, aber die Zeichenfolge ist sehr lang und enthält viele Zeilenumbrüche. Wie würde ich die Zeichenfolge des Benutzers nehmen und alle Zeilenumbrüche löschen, um es zu einer einzelnen Textzeile zu machen. Meine Methode zum Erfassen der Zeichenfolge ist sehr einfach.Entfernen Sie alle Zeilenumbrüche aus einer langen Textzeichenfolge

string = raw_input("Please enter string: ") 

Gibt es einen anderen Weg, ich sollte die Zeichenfolge vom Benutzer greifen? Ich benutze Python 2.7.4 auf einem Mac.

P.S. Klar, ich bin ein Noob, also selbst wenn eine Lösung nicht die effizienteste ist, würde man diejenige, die die einfachste Syntax verwendet, schätzen.

+0

http: // Stackoverflow.com/questions/1185524/how-to-trim-whitespace-including-tabs –

+4

@NicYoung, das ist ähnlich, aber anders. 'strip' entfernt Leerzeichen am Anfang und Ende eines Strings, nicht * innerhalb * des Strings ... –

Antwort

125

Wie geben Sie Linie mit raw_input bricht? Aber sobald Sie eine Zeichenfolge mit einigen Zeichen darin haben, wollen Sie loswerden, nur replace sie.

>>> mystr = raw_input('please enter string: ') 
please enter string: hello world, how do i enter line breaks? 
>>> # pressing enter didn't work... 
... 
>>> mystr 
'hello world, how do i enter line breaks?' 
>>> mystr.replace(' ', '') 
'helloworld,howdoienterlinebreaks?' 
>>> 

Im obigen Beispiel habe ich alle Leerzeichen ersetzt. Die Zeichenfolge '\n' steht für Zeilenumbrüche. Und \r stellt Wagenrücklauf dar (wenn Sie auf Windows sind, könnten Sie diese bekommen und ein zweiter replace wird sie für Sie behandeln!).

im Grunde:

# you probably want to use a space ' ' to replace `\n` 
mystring = mystring.replace('\n', ' ').replace('\r', '') 

Beachten Sie auch, dass es eine schlechte Idee ist, Ihre Variable string zu nennen, da dies das Modul string Schatten. Ein anderer Name würde ich vermeiden, würde aber gerne mal verwenden: file. Aus dem gleichen Grunde.

+0

Arbeitete perfekt, Entschuldigung für die dumme Frage! Meine erste Lösung bestand darin, die Zeichenfolge aufzulisten und nach allen Instanzen von \ n zu suchen. Da die Liste jedoch nur 1 Zeichen pro Listeneintrag enthielt, gab die Suche immer false zurück, weil entweder \ oder n, aber nicht beide in derselben Liste gefunden wurden Eintrag. –

+2

Diese Antwort ist sehr hilfreich für mich, weil es die '\ r' Wagenrückläufe erwähnt. Ich habe alle Methoden ausprobiert, um '\ n' zu entfernen, habe aber immer noch nicht die' \ r' Zeichen aufgenommen. – Clay

+1

Das macht normalerweise den Job für mich - string.replace ('\ r \ n', '')). Die meisten Protokoll-/Texteditor-Dateien folgen diesem Format für neue Zeilen. –

18

können Sie versuchen, Zeichenfolge mit ersetzen:

string = string.replace('\r', '').replace('\n', '') 
+0

Ich hatte ein Problem mit einigen Texten. Ich habe versucht, rstrip() zu verwenden, aber nicht funktioniert. Ich benutze ersetzen(). –

10

auf Xbello Kommentar aktualisiert basiert:

string = my_string.rstrip('\r\n') 

mehr lesen here

+2

Ich wurde gerade dadurch gebissen. Wenn Sie \ n für rstrip angeben, schlägt \ r fehl. Wenn Sie nichts angeben, werden Leerzeichen, \ t und möglicherweise andere abgeschnitten. Sie müssen 'rstrip (" \ r \ n ")' – xbello

+0

tnx verwenden, aktualisierte die Antwort. – tokhi

11

Sie können die Zeichenfolge ohne Trennzeichen arg aufgespalten, die aufeinander folgende Leerzeichen als einzelne Separator behandeln (einschließlich Zeilenumbrüche und Tabulatoren). Dann kommt ein Leerzeichen:

In : " ".join("\n\nsome text \r\n with multiple whitespace".split()) 
Out: 'some text with multiple whitespace' 

https://docs.python.org/2/library/stdtypes.html#str.split

+1

Danke, sehr einfach und effektiv :) –

1

Verfahren Berücksichtigung

  • zusätzliche weiße Zeichen am Anfang/Ende der Zeichenkette
  • zusätzliche weiße Zeichen am Anfang/Ende von jeder Zeile
  • verschiedene Endzeilenzeichen

es braucht eine solche mehrzeilige Kette, die z.

test_str = '\nhej ho \n aaa\r\n a\n ' 

und produziert schöne einzeilige Zeichenfolge

>>> ' '.join([line.strip() for line in test_str.strip().splitlines()]) 
'hej ho aaa a' 
+0

Dies behandelt nicht den Fall von zusammenhängenden Zeilenvorschübe in der Mitte der Zeichenfolge. Zwei Zeilenvorschübe führen zu zwei zusammenhängenden Leerzeichen in der Ausgabe. Versuchen Sie "test_str = '\ nhej ho \ n aaa \ r \ n \ n a \ n'" –

Verwandte Themen