funcion - substring python
¿Cómo recortar los espacios en blanco? (14)
¿Existe una función de Python que recorte los espacios en blanco (espacios y tabulaciones) de una cadena?
Ejemplo: /t example string/t
→ example string
(re.sub (''+'', '''', (my_str.replace (''/ n'', '''')))) strip ()
Esto eliminará todos los espacios no deseados y los caracteres de nueva línea. Espero que esto ayude
import re
my_str = '' a b /n c ''
formatted_str = (re.sub('' +'', '' '',(my_str.replace(''/n'','' '')))).strip()
Esto resultará:
''ab / nc'' se cambiará a ''ab c''
El método de trim
Python se llama strip
:
str.strip() #trim
str.lstrip() #ltrim
str.rstrip() #rtrim
En general, estoy usando el siguiente método:
>>> 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''
Nota: Esto es solo para eliminar "/ n", "/ r" y "/ t" solamente. No elimina espacios extra.
Esto eliminará todos los espacios en blanco y las nuevas líneas tanto del principio como del final de una cadena:
>>> s = " /n/t /n some /n text /n "
>>> re.sub("^/s+|/s+$", "", s)
>>> "some /n text"
Los espacios en blanco incluyen espacio, pestañas y CRLF . Por lo tanto, una función de cadena elegante y de una sola línea que podemos usar es la traducción .
'' hello apple''.translate(None, '' /n/t/r'')
O si quieres ser minucioso
import string
'' hello apple''.translate(None, string.whitespace)
Los espacios en blanco en ambos lados:
s = " /t a string example/t "
s = s.strip()
Espacio en blanco en el lado derecho:
s = s.rstrip()
Espacio en blanco en el lado izquierdo:
s = s.lstrip()
Como thedz señala thedz , puede proporcionar un argumento para quitar caracteres arbitrarios a cualquiera de estas funciones como esta:
s = s.strip('' /t/n/r'')
Esto eliminará cualquier espacio, /t
, /n
o /r
caracteres del lado izquierdo, del lado derecho o de ambos lados de la cadena.
Los ejemplos anteriores solo eliminan las cadenas de los lados izquierdo y derecho de las cadenas. Si también desea eliminar caracteres del medio de una cadena, intente re.sub
:
import re
print re.sub(''[/s+]'', '''', s)
Eso debería imprimirse:
astringexample
Nadie ha publicado estas soluciones regex todavía.
Pareo:
>>> 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
Buscando (tienes que manejar el caso de entrada de "solo espacios" de manera diferente):
>>> 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''
Si usa re.sub
, puede eliminar el espacio en blanco interno, lo que podría ser indeseable.
Para espacios en blanco iniciales y finales:
s = '' foo /t ''
print s.strip() # prints "foo"
De lo contrario, una expresión regular funciona:
import re
pat = re.compile(r''/s+'')
s = '' /t foo /t bar /t ''
print pat.sub('''', s) # prints "foobar"
Si usa Python 3: En su declaración de impresión, termine con sep = "". Eso separará todos los espacios.
EJEMPLO:
txt="potatoes"
print("I love ",txt,"",sep="")
Esto va a imprimir: me encantan las patatas.
En lugar de: me encantan las papas.
En tu caso, ya que estarías intentando obtener el / t, haz sep = "/ t"
También puede usar una función muy simple y básica: str.replace() , funciona con los espacios en blanco y las pestañas:
>>> whitespaces = " abcd ef gh ijkl "
>>> tabs = " abcde fgh ijkl"
>>> print whitespaces.replace(" ", "")
abcdefghijkl
>>> print tabs.replace(" ", "")
abcdefghijkl
Simple y fácil.
intenta traducir
>>> 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''
para eliminar espacios en blanco de la mitad de la cadena
$p = "ATGCGAC ACGATCGACC";
$p =~ s//s//g;
print $p;
salida: ATGCGACACGATCGACC
something = "/t please_ /t remove_ all_ /n/n/n/nwhitespaces/n/t "
something = "".join(something.split())
salida: please_remove_all_whitespaces
#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 '']