長いテキスト文字列からすべての改行を削除する


128

基本的に、コンソールにテキストの文字列を入力するようにユーザーに要求していますが、文字列は非常に長く、多くの改行が含まれています。ユーザーの文字列を取得し、すべての改行を削除して1行のテキストにする方法を教えてください。文字列を取得するための私の方法は非常に簡単です。

string = raw_input("Please enter string: ")

ユーザーから文字列を取得する別の方法はありますか?MacでPython 2.7.4を実行しています。

PS明らかに私は初心者なので、ソリューションが最も効率的ではない場合でも、最も単純な構文を使用するソリューションが評価されます。



4
@NicYoung、それは似ていますが異なります。strip文字列の内部ではなく、文字列の最初と最後の空白を削除します...
Daren Thomas

回答:


214

どのようにして改行を入力しraw_inputますか?ただし、文字列にいくつかの文字が含まれている場合は、削除したい文字だけを削除replaceします。

>>> 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?'
>>>

上記の例では、すべてのスペースを置き換えました。文字列'\n'は改行を表します。そして、\r(あなたは窓にしている場合は、これらを得るかもしれないと第二は、キャリッジリターンを表し、replaceあなたのためにそれらを処理します!)。

基本的に:

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

また、stringこれはモジュールをシャドウするため、変数を呼び出すことはお勧めしませんstring。私が避けたいが、時々使いたい別の名前:file。同じ理由で。


ばかげた質問で申し訳ありませんが、完全に機能しました。私の最初の解決策は、文字列をリストし、\ nのすべてのインスタンスを探すことでしたが、リストにはリストエントリごとに1文字しかないため、同じリストで\またはnのいずれかが見つからないため、検索はfalseを返し続けましたエントリ。
Ian Zane 2013年

4
この回答は、\rキャリッジリターンについて言及しているため、非常に役立ちます。私はすべての方法を削除しようとしました\nが、それでも\rキャラクターをキャプチャしていませんでした。
2014年

1
これは通常私のために仕事をします-string.replace( '\ r \ n'、 ''))。ほとんどのログ/テキストエディターファイルは、新しい行ではこの形式に従う傾向があります。
クエストモンガー2014年

1
変数名を使用しないことを指摘しましstringたが、同様の理由で変数名を使用したくありませんstr
tscizzle

2
@information_interchangeこのアプローチは\n、が含まれていないLinuxファイルで機能します\r\n
Noumenon

45

文字列置換を使用してみてください:

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

一部のテキストに問題がありました。rstrip()を使用しようとしましたが、機能しませんでした。replace()を使用します。
Bruno Gomes

25

セパレーター引数なしで文字列を分割できます。これにより、連続する空白が単一のセパレーター(改行とタブを含む)として扱われます。次に、スペースを使用して参加します。

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


タブ、ダブルスペースなども正規化するため、とてもいい
アイデアです。

15

Xbelloコメントに基づいて更新:

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

詳細はこちら


3
私はこれに噛まれたばかりです。rstripに\ nを指定すると、\ rは失敗します。何も指定しない場合、スペース、\ t、および場合によっては他のものが削除されます。使用する必要がありますrstrip("\r\n")
xbello

1
単なる文字列ましたrstrip('\r\n'):十分ではなかったとして行かなければならなかったmy_string.rstrip('\r\n').replace('\n', ' ')
MMT

8

別のオプションは正規表現です:

>>> import re
>>> re.sub("\n|\r", "", "Foo\n\rbar\n\rbaz\n\r")
'Foobarbaz'

連続した改行にマッチする方法についての詳細はいいだろうr'[\n\r]+'、あるいはr'\s+'単一のスペースで空白を交換します。
リサディーニャ

3

考慮した方法

  • 文字列の先頭/末尾に追加の白い文字
  • 各行の先頭/末尾に追加の白い文字
  • さまざまな行末文字

それは面倒かもしれないそのような複数行の文字列を取る

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

素敵な1行の文字列を生成します

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

更新:余分なスペースを生成する複数の改行文字を修正するには:

' '.join([line.strip() for line in test_str.strip().splitlines() if line.strip()])

これは次の場合にも機能します test_str = '\nhej ho \n aaa\r\n\n\n\n\n a\n '


これは、文字列の途中で連続する改行の場合を処理しません。2つの改行により、出力に2つの連続した空白が生じます。「test_str = '\ nhej ho \ n aaa \ r \ n \ na \ n'」を試してください
Mike Gleen

2

誰かがを使用することに決めた場合はreplacer'\n'代わりに試す必要があります'\n'

mystring = mystring.replace(r'\n', ' ').replace(r'\r', '')

どうして?なぜこれが良いアイデアなのかは漠然と覚えていますが、文書化する必要があります。
マーティンバーチ

1
私の場合、これを行う必要がありました:1. DBからHTMLコードを取得します。2. HTMLから必要なテキストを取得します。3.テキストからすべての改行を削除します。4.編集したテキストをスプレッドシートドキュメントに挿入します。使用されますr(「生の文字列リテラル」)。残念ながら、私にはその理由が
わかり

1

rstripの問題は、それがすべてのケースで機能するわけではないことです(私自身はほとんど見ていません)。代わりに-text = text.replace( "\ n"、 "")を使用できます。これにより、スペースを含むすべての新しい行が削除されます。

賛成票をありがとう。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.