2013-07-16 18 views
6

Jak mogę usunąć ciąg znaków ze wszystkimi \n i \t w python innych niż przy użyciu strip()?Usuń n lub tz określonego ciągu

Chcę sformatować ciąg jak "abc \n \t \t\t \t \nefg" do "abcefg „?

result = re.match("\n\t ", "abc \n\t efg") 
print result 

i wynik jest None

Odpowiedz

10

Wygląda na to chcemy także, aby usunąć spacje. Można zrobić coś takiego,

>>> import re 
>>> s = "abc \n \t \t\t \t \nefg" 
>>> s = re.sub('\s+', '', s) 
>>> s 
'abcefg' 

Innym sposobem byłoby zrobienie,

>>> s = "abc \n \t \t\t \t \nefg" 
>>> s = s.translate(None, '\t\n ') 
>>> s 
'abcefg' 
+0

Parametry dla 'translate()' zmienione w Pythonie> 3. Teraz zajmuje tabelę translacji, która może być generowana przez 'str.maketrans()'. https://docs.python.org/3/library/stdtypes.html#str.translate – gruentee

3

Jak to:

import re 

s = 'abc \n \t \t\t \t \nefg' 
re.sub(r'\s', '', s) 
=> 'abcefg' 
6

Niektórzy bardziej niż regex podejścia, dla odmiany:

>>> s="abc \n \t \t\t \t \nefg" 
>>> ''.join(s.split()) 
'abcefg' 
>>> ''.join(c for c in s if not c.isspace()) 
'abcefg' 
+1

Jest to znacznie szybsze od re. – seth

+0

@seth: Wydaje mi się, że 'translate' zwykle wygrywa w tych grach, gdzie ma to zastosowanie. Po prostu nie dbam o regexpy. : ^) – DSM