it-swarm.com.de

Wie schneide ich Leerzeichen?

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

Beispiel: \t example string\texample string

959
Chris

Whitespace auf beiden Seiten:

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

Whitespace auf der rechten Seite:

s = s.rstrip()

Whitespace auf der linken Seite:

s = s.lstrip()

Wie thedz weist darauf hin, können Sie ein Argument angeben, um beliebige Zeichen für eine der folgenden Funktionen zu entfernen:

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

Dadurch werden alle Leerzeichen, \t, \n oder \r Zeichen von der linken, rechten oder beiden Seiten der Zeichenfolge entfernt. 

In den obigen Beispielen werden nur Zeichenfolgen auf der linken und rechten Seite von Zeichenfolgen entfernt. Wenn Sie auch Zeichen aus der Mitte eines Strings entfernen möchten, versuchen Sie re.sub:

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

Das sollte ausdrucken:

astringexample
1448
James Thompson

Die trim-Methode von Python heißt strip:

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

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"
22
ars

Sie können auch eine sehr einfache und grundlegende Funktion 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
Lucas
#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
robert king

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

Passend dazu:

>>> 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" unterschiedlich 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 Sie re.sub verwenden, können Sie innere Leerzeichen entfernen, was unerwünscht sein kann.

4
user1149913

Whitespace enthält Leerzeichen, Tabulatoren und CRLF. Eine elegante und einzeilige Zeichenfolgenfunktion, 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
MaK

(re_sub ('+', '', (my_str.replace ('\ n', '')))). strip ()

Dadurch werden alle unerwünschten Leerzeichen und Zeilenumbrüche entfernt. Ich hoffe das hilft

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

Das wird resultieren:

'a b\n c' wird in 'a b c' geändert

3
Safvan CK
    something = "\t  please_     \t remove_  all_    \n\n\n\nwhitespaces\n\t  "

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

ausgabe: please_remove_all_whitespaces

2
pbn

versuche 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
海洋顶端

Wenn Sie Python 3 verwenden: Beenden Sie in Ihrer Druckanweisung mit sep = "". Dadurch werden alle Räume getrennt. 

BEISPIEL:

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

Dies wird drucken: Ich liebe Kartoffeln.

Anstelle von: Ich liebe Kartoffeln.

In Ihrem Fall, da Sie versuchen würden, mit dem\t zu fahren, tun Sie dies bitte "\ t".

0
morgansmnm

Wenn Sie den Leerraum nur am Anfang und am Ende der Zeichenfolge abschneiden möchten, können Sie Folgendes tun:

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

Dies funktioniert ähnlich wie die QString :: trimmed () - Methode von Qt, indem führende und nachfolgende Leerzeichen entfernt werden, während interne Leerzeichen in Ruhe gelassen werden.

Wenn Sie jedoch etwas wie die QString :: vereinfachte () - Methode von Qt haben möchten, die nicht nur führende und nachgestellte Leerzeichen entfernt, sondern alle aufeinanderfolgenden internen Leerzeichen zu einem Leerzeichen "zusammendrückt", können Sie eine Kombination aus .split() und " ".join wie verwenden diese:

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

In diesem letzten Beispiel wird jede Folge von internen Leerzeichen durch ein einzelnes Leerzeichen ersetzt, wobei das Leerzeichen immer noch vom Anfang und Ende der Zeichenfolge entfernt wird.

0
J-L