Вопрос по strip, string, whitespace, python, trim – Как мне обрезать пробелы?

966

Есть ли функция Python, которая будет вырезать пробелы (пробелы и табуляции) из строки?

Пример:\t example string\t & # X2192;example string

Возможный дубликатTrimming a string in Python Breno Baiardi
Символы, которые Python считает, что пробелы хранятся вstring.whitespace. John Fouhy
Спасибо за внимание. Я обнаружил функцию полосы ранее, но, похоже, она не работает для моего ввода. Chris
За все? Как насчет равных игнорировать регистр? Это прискорбный случай, когда это намного легче почти на любом другом языке. demongolem
Такой же как:stackoverflow.com/questions/761804/trimming-a-string-in-python (хотя этот вопрос немного понятнее, ИМХО). Это также почти то же самое:stackoverflow.com/questions/959215/… Jonik

Ваш Ответ

15   ответов
18

str.replace (), работает с пробелами и вкладками:

>>> whitespaces = "   abcd ef gh ijkl       "
>>> tabs = "        abcde       fgh        ijkl"

>>> print whitespaces.replace(" ", "")
abcdefghijkl
>>> print tabs.replace(" ", "")
abcdefghijkl

Просто и легко.

Но это, увы, также удаляет внутреннее пространство, в то время как пример в оригинальном вопросе оставляет внутренние пространства нетронутыми.
4

Совпадение:

>>> import re
>>> p=re.compile('\\s*(.*\\S)?\\s*')

>>> m=p.match('  \t blah ')
>>> m.group(1)
'blah'

>>> m=p.match('  \tbl ah  \t ')
>>> m.group(1)
'bl ah'

>>> m=p.match('  \t  ')
>>> print m.group(1)
None

Поиск (нужно по-разному обрабатывать регистр ввода «только пробелы»):

>>> p1=re.compile('\\S.*\\S')

>>> m=p1.search('  \tblah  \t ')
>>> m.group()
'blah'

>>> m=p1.search('  \tbl ah  \t ')
>>> m.group()
'bl ah'

>>> m=p1.search('  \t  ')
>>> m.group()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'

Если вы используетеre.subВы можете удалить внутренние пробелы, что может быть нежелательным.

0

в своем операторе печати завершите с sep = & quot; & quot ;. Это выделит все пространства.

ПРИМЕР:

txt="potatoes"
print("I love ",txt,"",sep="")

This will print: Я люблю картошку.

Instead of: Я люблю картошку .

В вашем случае, так как вы пытаетесь использовать \ t, выполните sep = & quot; \ t & quot;

3

space, tabs and CRLF, Так элегантно иone-liner Строковая функция, которую мы можем использовать,translate.

' hello apple'.translate(None, ' \n\t\r')

OR если вы хотите быть тщательным

import string
' hello  apple'.translate(None, string.whitespace)
-1

>>> myStr = "Hi\n Stack Over \r flow!"
>>> charList = [u"\u005Cn",u"\u005Cr",u"\u005Ct"]
>>> import re
>>> for i in charList:
        myStr = re.sub(i, r"", myStr)

>>> myStr
'Hi Stack Over  flow'

Примечание. Это необходимо только для удаления \ n "," \ r ". и & quot; \ t & quot; только. Не удаляет лишние пробелы.

0

вы можете сделать что-то вроде этого:

some_string = "    Hello,    world!\n    "
new_string = some_string.strip()
# new_string is now "Hello,    world!"

Это работает во многом как метод Qtring :: trimmed () в Qt, так как удаляет начальные и конечные пробелы, оставляя только внутренние пробелы.

Но если вам нравится что-то вроде метода Qtring :: Simpified () Qt, который не только удаляет начальные и конечные пробелы, но также "squishes" все последовательные внутренние пробелы в один пробел, вы можете использовать комбинацию.split() а также" ".join, как это:

some_string = "\t    Hello,  \n\t  world!\n    "
new_string = " ".join(some_string.split())
# new_string is now "Hello, world!"

В этом последнем примере каждая последовательность внутренних пробелов заменяется одним пробелом, в то же время обрезая пробелы в начале и конце строки.

2
    something = "\t  please_     \t remove_  all_    \n\n\n\nwhitespaces\n\t  "

    something = "".join(something.split())

Просто и эффективно. Можно использовать & quot; & quot; .join (... чтобы разделить слова пробелом.
0

>>> import string
>>> print '\t\r\n  hello \r\n world \t\r\n'

  hello 
 world  
>>> tr = string.maketrans(string.whitespace, ' '*len(string.whitespace))
>>> '\t\r\n  hello \r\n world \t\r\n'.translate(tr)
'     hello    world    '
>>> '\t\r\n  hello \r\n world \t\r\n'.translate(tr).replace(' ', '')
'helloworld'
12
#how to trim a multi line string or a file

s=""" line one
\tline two\t
line three """

#line1 starts with a space, #2 starts and ends with a tab, #3 ends with a space.

s1=s.splitlines()
print s1
[' line one', '\tline two\t', 'line three ']

print [i.strip() for i in s1]
['line one', 'line two', 'line three']




#more details:

#we could also have used a forloop from the begining:
for line in s.splitlines():
    line=line.strip()
    process(line)

#we could also be reading a file line by line.. e.g. my_file=open(filename), or with open(filename) as myfile:
for line in my_file:
    line=line.strip()
    process(line)

#moot point: note splitlines() removed the newline characters, we can keep them by passing True:
#although split() will then remove them anyway..
s2=s.splitlines(True)
print s2
[' line one\n', '\tline two\t\n', 'line three ']
1451

s = "  \t a string example\t  "
s = s.strip()

Пробелы на правой стороне:

s = s.rstrip()

Пробелы на левой стороне:

s = s.lstrip()

Какthedz указывает, что вы можете предоставить аргумент для удаления произвольных символов для любой из этих функций, например:

s = s.strip(' \t\n\r')

Это лишит любое пространство,\t, \n, или же\r символы с левой, правой или с обеих сторон строки.

В приведенных выше примерах удаляются только строки с левой и правой сторон строк. Если вы также хотите удалить символы из середины строки, попробуйтеre.sub:

import re
print re.sub('[\s+]', '', s)

Это должно распечатать:

astringexample
@ JorgeE.Cardona - одна вещь, в которой ты немного ошибаешься -\s будет включать вкладки в то время какreplace(" ", "") Won & APOS; т.
Результаты для примеров должны быть весьма полезными :)
Не нужно перечислять пробельные символы:docs.python.org/2/library/string.html#string.whitespace
strip () принимает аргумент, чтобы сказать, что нужно отключить. Попробуйте: strip ('a \ t \ n \ r')
Последний пример в точности как использованиеstr.replace(" ",""), Вам не нужно использоватьre, если у вас не более одного пробела, ваш пример не работает.[] предназначен для маркировки отдельных символов, это не нужно, если вы используете только\s, Используйте либо\s+ или же[\s]+ (ненужно) но[\s+] не выполняет работу, в частности, если вы хотите заменить несколько пробелов на один, например, поворот"this example"  в"this example".
-2

$p = "ATGCGAC ACGATCGACC";
$p =~ s/\s//g;
print $p;

выход: ATGCGACACGATCGACC

3

(re..replace('\n',' ')))).strip()

Это удалит все ненужные пробелы и символы новой строки. Надеюсь это поможет

import re
my_str = '   a     b \n c   '
formatted_str = (re..replace('\n',' ')))).strip()

Это приведет к:

' a      b \n c ' will be changed to 'a b c'

22

s = '   foo    \t   '
print s.strip() # prints "foo"

В противном случае регулярное выражение работает:

import re
pat = re.compile(r'\s+')
s = '  \t  foo   \t   bar \t  '
print pat.sub('', s) # prints "foobar"
Вы вообще хотитеsub(" ", s) не"" позже будут объединены слова, и вы больше не сможете использовать.split(" ") токенизировать.
было бы неплохо увидеть выходprint заявления
-17

так и в конце строки:

>>> s = "  \n\t  \n   some \n text \n     "
>>> re.sub("^\s+|\s+$", "", s)
>>> "some \n text"
s.strip() только обрабатываетinitial пробел, но не пробел "обнаружен" после удаления других нежелательных персонажей. Обратите внимание, что это удалит даже пробел после окончательного начала\n
Рэйф, ты можешь перепроверить:s.strip() выдает точно такой же результат, как и ваше регулярное выражение.
Зачем использовать регулярные выражения, когдаs.strip() делает именно это?
Кто-то проголосовал против этого ответа, но не объяснил, почему он ошибочен. Позор вам (@NedBatchelder, если вы проголосовали против, пожалуйста, поменяйте местами, когда я объяснил ваш вопрос, и вы не упомянули ничего, что фактически было нарушено в моем ответе)
@Rafe, ты путаешь его с отделкой. Газа делает необходимые операции.
63

питонtrim метод называетсяstrip:

str.strip() #trim
str.lstrip() #ltrim
str.rstrip() #rtrim
что легко запомнить, потому что сtriр выглядит почти какtriм.

Похожие вопросы