Я хочу усунути весь пробіл із рядка на обох кінцях і між словами.
У мене є цей код Python:
def my_handle(self):
sentence = ' hello apple '
sentence.strip()
Але це лише виключає пробіли з обох сторін рядка. Як видалити весь пробіл?
Я хочу усунути весь пробіл із рядка на обох кінцях і між словами.
У мене є цей код Python:
def my_handle(self):
sentence = ' hello apple '
sentence.strip()
Але це лише виключає пробіли з обох сторін рядка. Як видалити весь пробіл?
Відповіді:
Якщо ви хочете видалити провідні та кінцеві пробіли, скористайтеся str.strip()
:
sentence = ' hello apple'
sentence.strip()
>>> 'hello apple'
Якщо ви хочете видалити всі символи пробілу, використовуйте str.replace()
:
(Примітка. Це видаляє лише "звичайний" пробіл ASCII, ' ' U+0020
але не будь-який інший пробіл )
sentence = ' hello apple'
sentence.replace(" ", "")
>>> 'helloapple'
Якщо ви хочете видалити дублювані пробіли, скористайтеся str.split()
:
sentence = ' hello apple'
" ".join(sentence.split())
>>> 'hello apple'
sentence.join(str_list)
ви просите python приєднати елементи з str_list з sentence
роздільником.
"".join(sentence.split())
насправді є канонічним рішенням, ефективно видаляючи весь пробіл, а не просто пробіли. Відмінну відповідь Марка Байєрса , мабуть, слід було б прийняти замість цієї менш застосовної відповіді.
Щоб видалити лише пробіли, використовуйте str.replace
:
sentence = sentence.replace(' ', '')
Для того, щоб видалити всі символи пробілу (пробіл, табуляція, переклад рядка, і так далі) , ви можете використовувати split
те join
:
sentence = ''.join(sentence.split())
або регулярний вираз:
import re
pattern = re.compile(r'\s+')
sentence = re.sub(pattern, '', sentence)
Якщо ви хочете видалити пробіл лише з початку і до кінця, ви можете використовувати strip
:
sentence = sentence.strip()
Ви можете також використовувати lstrip
для видалення пробілів лише з початку рядка, а rstrip
також пробілу з кінця рядка.
yourstr.translate(str.maketrans('', '', ' \n\t\r'))
Альтернативою є використання регулярних виразів та відповідність цим дивним символам з пробілами . Ось кілька прикладів:
Видаліть ВСІ пробіли в рядку, навіть між словами:
import re
sentence = re.sub(r"\s+", "", sentence, flags=re.UNICODE)
Видаліть пробіли в BEGINNING рядка:
import re
sentence = re.sub(r"^\s+", "", sentence, flags=re.UNICODE)
Видаліть пробіли в кінці рядка:
import re
sentence = re.sub(r"\s+$", "", sentence, flags=re.UNICODE)
Видаліть пробіли як у BEGINNING, так і в END в рядку:
import re
sentence = re.sub("^\s+|\s+$", "", sentence, flags=re.UNICODE)
Видаліть ТІЛЬКІ ДУПЛІКАТНІ пробіли:
import re
sentence = " ".join(re.split("\s+", sentence, flags=re.UNICODE))
(Усі приклади працюють і в Python 2, і в Python 3)
Пробіл включає простір, вкладки та CRLF . Отже, елегантна та однолінійна струнна функція, яку ми можемо використовувати str.translate
:
Пітон 3
' hello apple'..translate(str.maketrans('', '', ' \n\t\r'))
АБО якщо ви хочете бути ретельними:
import string
' hello apple'..translate(str.maketrans('', '', string.whitespace))
Пітон 2
' hello apple'.translate(None, ' \n\t\r')
АБО якщо ви хочете бути ретельними:
import string
' hello apple'.translate(None, string.whitespace)
\xc2\xa0
ans.translate( None, string.whitespace )
виробляє тільки builtins.TypeError: translate() takes exactly one argument (2 given)
для мене. Документи кажуть, що аргумент - це таблиця перекладу, див. String.maketrans (). Але дивіться коментар Амнона Харела нижче.
' hello apple'.translate(str.maketrans('', '', string.whitespace))
Примітка: краще зробити змінну для зберігання транс-таблиці, якщо ви збираєтесь робити це кілька разів.
Для видалення пробілів від початку та до кінця використовуйте strip
.
>> " foo bar ".strip()
"foo bar"
' hello \n\tapple'.translate({ord(c):None for c in ' \n\t\r'})
MaK вже вказував на "перекласти" метод вище. І ця варіація працює з Python 3 (див. Це питання ).
xxx.translate( { ord(c) :None for c in string.whitespace } )
для ґрунтовності.
Будь обережний:
strip
робить rstrip та lstrip (видаляє провідні та кінцеві пробіли, вкладки, повертає та формує канали, але він не видаляє їх посередині рядка).
Якщо ви замінюєте лише пробіли та вкладки, ви можете приховати CRLF, які схожі на те, що ви шукаєте, але не є однаковими.
import re
sentence = ' hello apple'
re.sub(' ','',sentence) #helloworld (remove all spaces)
re.sub(' ',' ',sentence) #hello world (remove double spaces)
Крім того, смуга має деякі варіанти:
Видаліть пробіли в BEGINNING і END рядка:
sentence= sentence.strip()
Видаліть пробіли в BEGINNING рядка:
sentence = sentence.lstrip()
Видаліть пробіли в кінці рядка:
sentence= sentence.rstrip()
Всі три функції рядка strip
lstrip
і rstrip
можуть приймати параметри рядка до смужки, за замовчуванням - це все пробіл. Це може бути корисно, коли ви працюєте з чимось конкретним, наприклад, ви можете видаляти лише пробіли, але не нові рядки:
" 1. Step 1\n".strip(" ")
Або ви можете видалити зайві коми після читання у списку рядків:
"1,2,3,".strip(",")
усуньте пробіл з рядка на обох кінцях і між словами.
>>> import re
>>> re.sub("\s+", # one or more repetition of whitespace
'', # replace with empty string (->remove)
''' hello
... apple
... ''')
'helloapple'
Документи Python:
re
що було запропоновано раніше, але я виявив, що фактична відповідь на назву питання трохи прихована серед усіх інших варіантів.
hello apple
?helloapple
?