219

Python文字列のすべてのスペースを削除するにはどうすればよいですか?たとえば、のような文字列をに変換したいのですstrip my spacesが、 :stripmyspacesでそれを達成できないようです。strip()

>>> 'strip my spaces'.strip()
'strip my spaces'
4

12 に答える 12

374

sepパラメーターなしでstr.splitの動作を利用する:

>>> s = " \t foo \n bar "
>>> "".join(s.split())
'foobar'

すべての空白ではなくスペースを削除したい場合:

>>> s.replace(" ", "")
'\tfoo\nbar'

時期尚早の最適化

効率は主要な目標ではありませんが(明確なコードを書くことはそうです)、いくつかの初期のタイミングは次のとおりです。

$ python -m timeit '"".join(" \t foo \n bar ".split())'
1000000 loops, best of 3: 1.38 usec per loop
$ python -m timeit -s 'import re' 're.sub(r"\s+", "", " \t foo \n bar ")'
100000 loops, best of 3: 15.6 usec per loop

正規表現はキャッシュされているため、想像するほど遅くはありません。事前にコンパイルしておくと役立つ場合もありますが、実際には、これを何度も呼び出す場合にのみ問題になります。

$ python -m timeit -s 'import re; e = re.compile(r"\s+")' 'e.sub("", " \t foo \n bar ")'
100000 loops, best of 3: 7.76 usec per loop

re.subは11.3倍遅くなりますが、ボトルネックは他の場所でも確実に発生することを忘れないでください。ほとんどのプログラムは、これら3つの選択肢のいずれの違いにも気付かないでしょう。

于 2010-09-18T00:54:26.467 に答える
79

Python 3の場合:

>>> import re
>>> re.sub(r'\s+', '', 'strip my \n\t\r ASCII and \u00A0 \u2003 Unicode spaces')
'stripmyASCIIandUnicodespaces'
>>> # Or, depending on the situation:
>>> re.sub(r'(\s|\u180B|\u200B|\u200C|\u200D|\u2060|\uFEFF)+', '', \
... '\uFEFF\t\t\t strip all \u000A kinds of \u200B whitespace \n')
'stripallkindsofwhitespace'

...あなたが考えていない空白文字を処理します-そして私たちを信じてください、たくさんあります。

\sそれ自体で常にASCII空白をカバーします。

  • (通常)スペース
  • タブ
  • 改行(\ n)
  • キャリッジリターン(\ r)
  • フォームフィード
  • 垂直タブ

さらに:

  • re.UNICODE有効になっているPython2の場合、
  • 追加のアクションなしのPython3の場合、

... \sUnicodeの空白文字についても説明します。次に例を示します。

  • ノーブレークスペース、
  • emスペース、
  • 表意文字空間、

...等。ここの「White_Spaceプロパティを持つUnicode文字」の下の完全なリストを参照してください。

ただし\s、特に次のように、事実上の空白である空白として分類されていない文字は対象外です。

  • ゼロ幅接合子、
  • モンゴル母音セパレータ、
  • ゼロ幅の改行なしスペース(別名バイト順マーク)、

...等。「White_Spaceプロパティのない関連するUnicode文字」の完全なリストを参照してください。

したがって、これらの6文字は、2番目の正規表現のリストでカバーされ\u180B|\u200B|\u200C|\u200D|\u2060|\uFEFFます。

出典:

于 2010-09-18T00:48:21.257 に答える
36

または、

"strip my spaces".translate( None, string.whitespace )

そしてここにPython3バージョンがあります:

"strip my spaces".translate(str.maketrans('', '', string.whitespace))
于 2013-05-20T16:16:31.477 に答える
14

最も簡単なのは、replaceを使用することです。

"foo bar\t".replace(" ", "").replace("\t", "")

または、正規表現を使用します。

import re
re.sub(r"\s", "", "foo bar\t")
于 2010-09-18T00:48:15.147 に答える
13

Pythonで開始スペースを削除する

string1 = "    This is Test String to strip leading space"
print(string1)
print(string1.lstrip())

Pythonで末尾または終了スペースを削除する

string2 = "This is Test String to strip trailing space     "
print(string2)
print(string2.rstrip())

Pythonの文字列の最初と最後から空白を削除します

string3 = "    This is Test String to strip leading and trailing space      "
print(string3)
print(string3.strip())

Pythonのすべてのスペースを削除します

string4 = "   This is Test String to test all the spaces        "
print(string4)
print(string4.replace(" ", ""))
于 2018-11-20T19:56:38.017 に答える
3

Roger Pateが述べたように、次のコードが私のために機能しました:

s = " \t foo \n bar "
"".join(s.split())
'foobar'

私はJupyterNotebookを使用して次のコードを実行しています:

i=0
ProductList=[]
while i < len(new_list): 
   temp=''                            # new_list[i]=temp=' Plain   Utthapam  '
   #temp=new_list[i].strip()          #if we want o/p as: 'Plain Utthapam'
   temp="".join(new_list[i].split())  #o/p: 'PlainUtthapam' 
   temp=temp.upper()                  #o/p:'PLAINUTTHAPAM' 
   ProductList.append(temp)
   i=i+2
于 2018-06-27T07:18:54.240 に答える
2

で正規表現を試してくださいre.sub。すべての空白を検索して、空の文字列に置き換えることができます。

\sパターン内の空白文字と一致します-スペース(タブ、改行など)だけではありません。あなたはマニュアルでそれについてもっと読むことができます。

于 2010-09-18T00:46:52.257 に答える
2
import re
re.sub(' ','','strip my spaces')
于 2016-10-24T13:14:42.550 に答える
2

リストをフィルタリングするための標準的な手法が適用されますが、split/joinまたはtranslateメソッドほど効率的ではありません。

空白のセットが必要です。

>>> import string
>>> ws = set(string.whitespace)

ビルトインfilter

>>> "".join(filter(lambda c: c not in ws, "strip my spaces"))
'stripmyspaces'

リスト内包表記(はい、括弧を使用してください:以下のベンチマークを参照してください):

>>> import string
>>> "".join([c for c in "strip my spaces" if c not in ws])
'stripmyspaces'

フォールド:

>>> import functools
>>> "".join(functools.reduce(lambda acc, c: acc if c in ws else acc+c, "strip my spaces"))
'stripmyspaces'

基準:

>>> from timeit import timeit
>>> timeit('"".join("strip my spaces".split())')
0.17734256500003198
>>> timeit('"strip my spaces".translate(ws_dict)', 'import string; ws_dict = {ord(ws):None for ws in string.whitespace}')
0.457635745999994
>>> timeit('re.sub(r"\s+", "", "strip my spaces")', 'import re')
1.017787621000025

>>> SETUP = 'import string, operator, functools, itertools; ws = set(string.whitespace)'
>>> timeit('"".join([c for c in "strip my spaces" if c not in ws])', SETUP)
0.6484303600000203
>>> timeit('"".join(c for c in "strip my spaces" if c not in ws)', SETUP)
0.950212219999969
>>> timeit('"".join(filter(lambda c: c not in ws, "strip my spaces"))', SETUP)
1.3164566040000523
>>> timeit('"".join(functools.reduce(lambda acc, c: acc if c in ws else acc+c, "strip my spaces"))', SETUP)
1.6947649049999995
于 2019-04-04T19:12:14.850 に答える
0

TL / DR

このソリューションは、Python3.6を使用してテストされました

Python3で文字列からすべてのスペースを削除するには、次の関数を使用できます。

def remove_spaces(in_string: str):
    return in_string.translate(str.maketrans({' ': ''})

空白文字('\ t \ n \ r \ x0b \ x0c')を削除するには、次の関数を使用できます。

import string
def remove_whitespace(in_string: str):
    return in_string.translate(str.maketrans(dict.fromkeys(string.whitespace)))

説明

Pythonのstr.translateメソッドはstrの組み込みクラスメソッドであり、テーブルを受け取り、渡された変換テーブルを介して各文字がマップされた文字列のコピーを返します。str.translateの完全なドキュメント

変換テーブルを作成するためにstr.maketrans使用されます。このメソッドは、のもう1つの組み込みクラスメソッドですstr。ここでは、1つのパラメーター(この場合は辞書)のみで使用します。キーは、文字置換値で値にマップされた置換される文字です。で使用する変換テーブルを返しますstr.translatestr.maketransの完全なドキュメント

Pythonのstringモジュールには、いくつかの一般的な文字列演算と定数が含まれています。string.whitespace空白と見なされるすべてのASCII文字を含む文字列を返す定数です。これには、文字スペース、タブ、改行、リターン、フォームフィード、および垂直タブが含まれます。文字列の完全なドキュメント

2番目の関数では、キーが値を持つそれぞれdict.fromkeysによって返される文字列内の文字である辞書を作成するために使用されます。dict.fromkeysの完全なドキュメントstring.whitespaceNone

于 2019-03-27T16:51:42.643 に答える
0

最適なパフォーマンスが要件ではなく、単純なものが必要な場合は、文字列クラスに組み込まれている「isspace」メソッドを使用して、各文字をテストするための基本関数を定義できます。

def remove_space(input_string):
    no_white_space = ''
    for c in input_string:
        if not c.isspace():
            no_white_space += c
    return no_white_space

この方法でno_white_space文字列を作成しても理想的なパフォーマンスは得られませんが、解決策は簡単に理解できます。

>>> remove_space('strip my spaces')
'stripmyspaces'

関数を定義したくない場合は、これをリスト内包表記で漠然と似たものに変換できます。トップアンサーのjoin解決策から借りる:

>>> "".join([c for c in "strip my spaces" if not c.isspace()])
'stripmyspaces'
于 2019-11-08T22:15:22.870 に答える
0
  1. 文字列を分割して単語を区切る
  2. 両側の空白を取り除く
  3. 最後に単一のスペースでそれらを結合します

コードの最終行:

' '.join(word.strip() for word in message_text.split()
于 2021-10-17T11:28:40.570 に答える