文字列から空白を削除するにはどうすればよいですか?


1157

Pythonで文字列から先頭と末尾の空白を削除するにはどうすればよいですか?

例えば:

" Hello " --> "Hello"
" Hello"  --> "Hello"
"Hello "  --> "Hello"
"Bob has a cat" --> "Bob has a cat"

17
この質問は、3分間の剥ぎ取り作業について同僚と話し合ったところです。途中で参加している他の人にとって、彼らは私たち全員が少し夜の仕事であると思っていたでしょう。
Whitecat、2016

回答:


1736

スペースは1つだけですか、それともすべて連続したスペースですか?2番目の場合、文字列にはすでに.strip()メソッドがあります。

>>> ' Hello '.strip()
'Hello'
>>> ' Hello'.strip()
'Hello'
>>> 'Bob has a cat'.strip()
'Bob has a cat'
>>> '   Hello   '.strip()  # ALL consecutive spaces at both ends removed
'Hello'

ただし、スペースを1つだけ削除する必要がある場合は、次の方法で削除できます。

def strip_one_space(s):
    if s.endswith(" "): s = s[:-1]
    if s.startswith(" "): s = s[1:]
    return s

>>> strip_one_space("   Hello ")
'  Hello'

また、str.strip()他の空白文字(タブや改行など)も削除されることに注意してください。スペースのみを削除するには、削除する文字をの引数として指定できますstrip

>>> "  Hello\n".strip(" ")
'Hello\n'

19
ストリップ関数、たとえばマップ関数が必要な場合は、次のようにstr.strip()を介してアクセスできます。map(str.strip、collection_of_s)
Ward

1
末尾の空白のみを削除する方法はありますか?
Nikhil Girraj、2015

2
@killthrush参照ありがとうございますが、rstrip()機能を意味していると思います。:-)
Nikhil Girraj

14
-時々私は意図的に言語の大半は「ユニーク」と「違う」ようにするために使用することはよく受け入れられ、意味のある名前を回避pythonのように感じるstrip代わりにtrimisinstance代わりにinstanceoflist代わりのarray理由だけではなく、使用していないなど、など、誰もが知っている名前?? geez:P
Gershom 2015年

3
@GershomMaes stripの場合、私は完全に同意しますが、リストは配列とはまったく異なります。
JFA

262

上記の回答で指摘したように

myString.strip()

\ n、\ r、\ t、\ f、スペースなどのすべての前後の空白文字を削除します。

柔軟性を高めるには、以下を使用します

  • 先頭の空白文字のみを削除します。myString.lstrip()
  • 末尾の空白文字のみを削除します。myString.rstrip()
  • 特定の空白文字を削除します:myString.strip('\n')or myString.lstrip('\n\r')またはmyString.rstrip('\n\t')など。

詳細はドキュメントで利用可能です


私は\ r \ nではない\ n \ r ...(投稿を編集できません-十分な
文字数が

8
@StefanNch:文字の順序はまったく問題ではありません。\ n \ rは\ r \ nも削除します。
ヨハネスオーバーマン、


54

これにより先頭と末尾の空白がすべて削除されmyStringます。

myString.strip()

3
この投稿にはコードのみが含まれ、関数の機能は説明されていません。先頭または末尾の空白、またはその両方を削除しますか?スペースだけ、またはあらゆる種類の空白を削除しますか?次に、スペースだけを削除することはできますか?それを行う別の機能はありますか?先頭と末尾の両方の空白を削除する場合は、2つのうちの1つだけを削除できますか、それとも、ジョブを実行する他の関数がありますか?myString.strip()私が述べた質問のどれにも答えません。
EKons

8
公平を期すために、OPは文字列から先頭と末尾の空白を削除する方法を具体的に求めました。私への十分な答え
Denis Lins

21

あなたはstrip()が欲しい:

myphrases = [ " Hello ", " Hello", "Hello ", "Bob has a cat" ]

for phrase in myphrases:
    print phrase.strip()

0

文字列内のあまりにも多くのスペースを削除したかった(最初と最後だけでなく、文字列の間でも)。それ以外の方法がわからないので、私はこれを作りました:

string = "Name : David         Account: 1234             Another thing: something  " 

ready = False
while ready == False:
    pos = string.find("  ")
    if pos != -1:
       string = string.replace("  "," ")
    else:
       ready = True
print(string)

これにより、ダブルスペースがなくなるまで、1つのスペースのダブルスペースが置き換えられます。


これは機能しますが、あまり効率的ではありません。代わりにこれを使用してください:stackoverflow.com/a/2077906/1240286
Arklur

0

探していたものに対する解決策が見つからなかったため、カスタム関数をいくつか作成しました。それらを試すことができます。

def cleansed(s: str):
    """:param s: String to be cleansed"""
    assert s is not (None or "")
    # return trimmed(s.replace('"', '').replace("'", ""))
    return trimmed(s)


def trimmed(s: str):
    """:param s: String to be cleansed"""
    assert s is not (None or "")
    ss = trim_start_and_end(s).replace('  ', ' ')
    while '  ' in ss:
        ss = ss.replace('  ', ' ')
    return ss


def trim_start_and_end(s: str):
    """:param s: String to be cleansed"""
    assert s is not (None or "")
    return trim_start(trim_end(s))


def trim_start(s: str):
    """:param s: String to be cleansed"""
    assert s is not (None or "")
    chars = []
    for c in s:
        if c is not ' ' or len(chars) > 0:
            chars.append(c)
    return "".join(chars).lower()


def trim_end(s: str):
    """:param s: String to be cleansed"""
    assert s is not (None or "")
    chars = []
    for c in reversed(s):
        if c is not ' ' or len(chars) > 0:
            chars.append(c)
    return "".join(reversed(chars)).lower()


s1 = '  b Beer '
s2 = 'Beer  b    '
s3 = '      Beer  b    '
s4 = '  bread butter    Beer  b    '

cdd = trim_start(s1)
cddd = trim_end(s2)
clean1 = cleansed(s3)
clean2 = cleansed(s4)

print("\nStr: {0} Len: {1} Cleansed: {2} Len: {3}".format(s1, len(s1), cdd, len(cdd)))
print("\nStr: {0} Len: {1} Cleansed: {2} Len: {3}".format(s2, len(s2), cddd, len(cddd)))
print("\nStr: {0} Len: {1} Cleansed: {2} Len: {3}".format(s3, len(s3), clean1, len(clean1)))
print("\nStr: {0} Len: {1} Cleansed: {2} Len: {3}".format(s4, len(s4), clean2, len(clean2)))

0

指定した数のスペースを左右からトリミングする場合は、次のようにします。

def remove_outer_spaces(text, num_of_leading, num_of_trailing):
    text = list(text)
    for i in range(num_of_leading):
        if text[i] == " ":
            text[i] = ""
        else:
            break

    for i in range(1, num_of_trailing+1):
        if text[-i] == " ":
            text[-i] = ""
        else:
            break
    return ''.join(text)

txt1 = "   MY name is     "
print(remove_outer_spaces(txt1, 1, 1))  # result is: "  MY name is    "
print(remove_outer_spaces(txt1, 2, 3))  # result is: " MY name is  "
print(remove_outer_spaces(txt1, 6, 8))  # result is: "MY name is"


0

Pythonで文字列から先頭と末尾の空白を削除するにはどうすればよいですか?

したがって、以下の解決策では、先頭と末尾の空白、および中間の空白も削除されます。複数の空白なしで明確な文字列値を取得する必要がある場合のように。

>>> str_1 = '     Hello World'
>>> print(' '.join(str_1.split()))
Hello World
>>>
>>>
>>> str_2 = '     Hello      World'
>>> print(' '.join(str_2.split()))
Hello World
>>>
>>>
>>> str_3 = 'Hello World     '
>>> print(' '.join(str_3.split()))
Hello World
>>>
>>>
>>> str_4 = 'Hello      World     '
>>> print(' '.join(str_4.split()))
Hello World
>>>
>>>
>>> str_5 = '     Hello World     '
>>> print(' '.join(str_5.split()))
Hello World
>>>
>>>
>>> str_6 = '     Hello      World     '
>>> print(' '.join(str_6.split()))
Hello World
>>>
>>>
>>> str_7 = 'Hello World'
>>> print(' '.join(str_7.split()))
Hello World

ご覧のとおり、これにより文字列内の複数の空白がすべて削除されます(Hello Worldすべてが出力されます)。場所は関係ありません。ただし、先頭と末尾の空白を本当に必要とする場合は、それstrip()が見つかります。

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