Виділити пробіли / вкладки / нові рядки - python


94

Я намагаюся видалити всі пробіли / вкладки / нові рядки в python 2.7 в Linux.

Я написав це, що повинно зробити роботу:

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

вихід:

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

Здається, це просто зробити, але я чогось тут пропускаю. Чи варто щось імпортувати?


Перевірте відповідь на відповідне запитання: stackoverflow.com/questions/1185524/… strip () видаляє лише провідні та кінцеві символи, а не ВСІ символи.
dckrooney

1
може бути корисним: stackoverflow.com/questions/8928557 / ...
newtover

1
Це спрацювало для мене з: [Як обрізати пробіли (включаючи вкладки)?] [1] s = s.strip ('\ t \ n \ r') [1]: stackoverflow.com/questions/1185524/…
stamat

Відповіді:


124

Використовуйте str.split([sep[, maxsplit]])без sepабоsep=None :

З документів :

Якщо sepне вказано або є None, застосовується інший алгоритм розбиття: прогони послідовних пробілів розглядаються як один роздільник, і результат не буде містити порожніх рядків на початку або в кінці, якщо рядок має пробіли, що ведуть або відстають.

Демо:

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

Використовуйте str.joinу списку, що повернувся, щоб отримати цей результат:

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

57

Якщо ви хочете видалити кілька пробілів та замінити їх одинарними пробілами, найпростіший спосіб - це такий регулярний вираз:

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

Потім ви можете видалити кінцевий простір за допомогою, .strip()якщо хочете.


13

Використовуйте бібліотеку re

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

Вихід:

Я хочу видалити всі пробіли, нові рядки та вкладки


1
Це виправлення оригінальної відповіді, даної @ TheGr8Adakron, а не дублікат
Єзуїзм

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
це також видаляє ';'
січень

10

Це лише видалить вкладку, нові рядки, пробіли та більше нічого.

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)

ВИХІД:

IwantoВидалити всіпростори, нові рядки та вкладки

Хороший день!


1
Дякую за рішення - я думаю, що потрібна незначна корекція, вона повинна бути "+" замість "*".
Саджад Карім,

5

Вищевказані рішення, що пропонують використовувати регулярний вираз, не є ідеальними, оскільки це настільки невелике завдання, і регулярний вираз вимагає більших витрат ресурсів, ніж виправдовує простота завдання.

Ось що я роблю:

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

або якщо у вас була купа речей, щоб видалити такі, що однорядкове рішення було б безоплатно довгим:

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

2

Оскільки немає нічого більш складного, я хотів поділитися цим, оскільки це мені допомогло.

Це те, що я спочатку використовував:

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))

Небажаний результат:

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

Це те, що я змінив на:

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

Бажаний результат:

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

Точний регулярний вираз, про який згадав @MattH, працював для мене, вкладаючи його в мій код. Дякую!

Примітка: Це python3

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.