Gibt es eine Python-Funktion, die Leerzeichen (Leerzeichen und Tabulatoren) aus einer Zeichenfolge trimmt?
Beispiel: \t example string\t
→ example string
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
Die trim
-Methode von Python heißt strip
:
str.strip() #trim
str.lstrip() #ltrim
str.rstrip() #rtrim
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"
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.
#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 ']
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.
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)
(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
something = "\t please_ \t remove_ all_ \n\n\n\nwhitespaces\n\t "
something = "".join(something.split())
ausgabe: please_remove_all_whitespaces
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'
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".
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.