Frage Wie trimme ich Whitespace?


Gibt es eine Python-Funktion, die Leerzeichen (Leerzeichen und Tabulatoren) von einer Zeichenfolge abschneidet?

Beispiel: \t example string\t → example string


894
2017-07-26 20:54


Ursprung


Antworten:


Leerzeichen auf beiden Seiten:

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

Whitespace auf der rechten Seite:

s = s.rstrip()

Leerzeichen auf der linken Seite:

s = s.lstrip()

Wie Thedz weist darauf hin, dass Sie ein Argument zum Entfernen beliebiger Zeichen für eine dieser Funktionen bereitstellen können:

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

Dies wird jeden Platz strippen, \t, \n, oder \r Zeichen von der linken Seite, von der rechten Seite oder von beiden Seiten der Zeichenfolge.

Die obigen Beispiele entfernen nur Strings von der linken und rechten Seite von Strings. Wenn Sie auch Zeichen aus der Mitte einer Zeichenfolge entfernen möchten, versuchen Sie es re.sub:

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

Das sollte ausdrucken:

astringexample

1347
2017-07-26 20:56



Python trim Methode wird aufgerufen strip:

str.strip() #trim
str.lstrip() #ltrim
str.rstrip() #rtrim

55
2018-02-17 10:00



Für führende und nachfolgende Leerzeichen:

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

Ansonsten funktioniert ein regulärer Ausdruck:

import re
pat = re.compile(r'\s+')
s = '  \t  foo   \t   bar \t  '
print pat.sub('', s) # prints "foobar"

20
2017-07-26 20:56



Sie können auch sehr einfache und grundlegende Funktionen verwenden: str.replace (), arbeitet mit den Whitespaces und Tabs:

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

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

Simpel und einfach.


18
2018-06-11 14:18



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

12
2018-02-13 05:16



Niemand hat diese Regex-Lösungen bisher veröffentlicht.

Passende:

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

Suchen (Sie müssen den Eingabefall "Nur Leerzeichen" anders behandeln):

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

Wenn du benutzt re.sub, können Sie innere Leerräume entfernen, was unerwünscht sein könnte.


4
2018-02-12 02:22



Whitespace beinhaltet Leerzeichen, Tabulatoren und CRLF. Also ein elegantes und Einzeiler String-Funktion, die wir verwenden können, ist Übersetzen.

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

ODER wenn Sie gründlich sein wollen

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

3
2017-11-28 05:45



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

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

Ausgabe:   please_remove_all_whitespaces


2
2018-06-19 02:58



versuche es zu übersetzen

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

0
2018-04-15 03:43



Im Allgemeinen verwende ich die folgende Methode:

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

Hinweis: Dies dient nur zum Entfernen von "\ n", "\ r" und "\ t". Es werden keine zusätzlichen Leerzeichen entfernt.


-1
2017-10-02 12:35