Şerit boşlukları / sekmeleri / satırsonları - python


101

Linux'ta python 2.7'deki tüm boşlukları / sekmeleri / satır başlarını kaldırmaya çalışıyorum.

Bunu yazdım, bu işi yapmalı:

myString="I want to Remove all white \t spaces, new lines \n and tabs \t"
myString = myString.strip(' \n\t')
print myString

çıktı:

I want to Remove all white   spaces, new lines 
 and tabs

Yapması kolay bir şey gibi görünüyor, ancak burada bir şey eksik. Bir şey ithal etmeli miyim?


Bu ilgili sorunun cevabına bakın: stackoverflow.com/questions/1185524/… strip () TÜM karakterleri değil, yalnızca baştaki ve sondaki karakterleri kaldırır.
dckrooney


1
Bu benim için çalıştı: [Beyaz boşluk nasıl kırpılır (sekmeler dahil)?] [1] s = s.strip ('\ t \ n \ r') [1]: stackoverflow.com/questions/1185524/…
stamat

Yanıtlar:


131

str.split([sep[, maxsplit]])Hayır sepveya ile kullanın sep=None:

Gönderen docs :

Eğer sepbelirtilen veya olmayan Noneardışık boşluk içinde çalışır tek ayırıcı olarak kabul edilir ve dize başında veya sonlarındaki boşluk varsa sonuç başlangıcında veya sonunda boş dizeleri içerecektir: Farklı bir bölme algoritması uygulanır.

Demo:

>>> myString.split()
['I', 'want', 'to', 'Remove', 'all', 'white', 'spaces,', 'new', 'lines', 'and', 'tabs']

Kullan str.joinbu çıktıyı almak döndü listede:

>>> ' '.join(myString.split())
'I want to Remove all white spaces, new lines and tabs'

58

Birden fazla boşluk öğesini kaldırmak ve bunları tek boşluklarla değiştirmek istiyorsanız, bunun en kolay yolu şuna benzer bir normal ifade kullanmaktır:

>>> import re
>>> myString="I want to Remove all white \t spaces, new lines \n and tabs \t"
>>> re.sub('\s+',' ',myString)
'I want to Remove all white spaces, new lines and tabs '

Ardından, .strip()isterseniz sondaki boşluğu kaldırabilirsiniz .


15

Yeniden kütüphaneyi kullan

import re
myString = "I want to Remove all white \t spaces, new lines \n and tabs \t"
myString = re.sub(r"[\n\t\s]*", "", myString)
print myString

Çıktı:

IwanttoRemoveallwhitespaces, newlinesandtabs


1
Bu, @ TheGr8Adakron tarafından verilen orijinal cevabın bir düzeltmesidir, bir kopya değil
Jesuisme

12
import re

mystr = "I want to Remove all white \t spaces, new lines \n and tabs \t"
print re.sub(r"\W", "", mystr)

Output : IwanttoRemoveallwhitespacesnewlinesandtabs

4
bu aynı zamanda ';'
Ocak

11

Bu yalnızca sekmeyi, satırsonlarını, boşlukları ve başka hiçbir şeyi kaldırır.

import re
myString = "I want to Remove all white \t spaces, new lines \n and tabs \t"
output   = re.sub(r"[\n\t\s]*", "", myString)

ÇIKTI:

IwantoRemoveallwhiespaces, newlinesandtabs

İyi günler!


1
Çözüm için teşekkürler - küçük bir düzeltme gerektiğini düşünüyorum, "*" yerine "+" olmalı.
Sajad Karim

6

Normal ifadenin kullanımını öneren yukarıdaki çözümler ideal değildir çünkü bu çok küçük bir görevdir ve normal ifade, görevin basitliğinin gerekçelendirdiğinden daha fazla ek kaynak gerektirir.

İşte yaptığım şey:

myString = myString.replace(' ', '').replace('\t', '').replace('\n', '')

veya tek satırlık bir çözümün gereksiz yere uzun olacağı şekilde kaldırmanız gereken bir sürü şey varsa:

removal_list = [' ', '\t', '\n']
for s in removal_list:
  myString = myString.replace(s, '')

2

Daha karmaşık olan başka bir şey olmadığı için, bunu bana yardımcı olduğu için paylaşmak istedim.

Başlangıçta kullandığım şey bu:

import requests
import re

url = '/programming/10711116/strip-spaces-tabs-newlines-python' # noqa
headers = {'user-agent': 'my-app/0.0.1'}
r = requests.get(url, headers=headers)
print("{}".format(r.content))

İstenmeyen Sonuç:

b'<!DOCTYPE html>\r\n\r\n\r\n    <html itemscope itemtype="http://schema.org/QAPage" class="html__responsive">\r\n\r\n    <head>\r\n\r\n        <title>string - Strip spaces/tabs/newlines - python - Stack Overflow</title>\r\n        <link

Ben bunu şu şekilde değiştirdim:

import requests
import re

url = '/programming/10711116/strip-spaces-tabs-newlines-python' # noqa
headers = {'user-agent': 'my-app/0.0.1'}
r = requests.get(url, headers=headers)
regex = r'\s+'
print("CNT: {}".format(re.sub(regex, " ", r.content.decode('utf-8'))))

İstenen sonuç:

<!DOCTYPE html> <html itemscope itemtype="http://schema.org/QAPage" class="html__responsive"> <head> <title>string - Strip spaces/tabs/newlines - python - Stack Overflow</title>

@MattH'ın bahsettiği kesin normal ifade, onu koduma uydururken benim için işe yarayan şeydi. Teşekkürler!

Not: Bu python3


0

Join içinde bir liste anlama kullanan tek satırlık bir işe ne dersiniz?

>>> foobar = "aaa bbb\t\t\tccc\nddd"
>>> print(foobar)
aaa bbb                 ccc
ddd

>>> print(''.join([c for c in foobar if c not in [' ', '\t', '\n']]))
aaabbbcccddd
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.