Question Comment découper les espaces?


Y at-il une fonction Python qui va couper les espaces (espaces et tabulations) à partir d'une chaîne?

Exemple: \t example string\t → example string


894
2017-07-26 20:54


origine


Réponses:


Espace blanc des deux côtés:

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

Espace blanc sur le côté droit:

s = s.rstrip()

Espace blanc sur le côté gauche:

s = s.lstrip()

Comme thedz souligne, vous pouvez fournir un argument pour dépouiller les caractères arbitraires à l'une de ces fonctions comme ceci:

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

Cela va décaper tout espace, \t, \n, ou \r caractères du côté gauche, du côté droit ou des deux côtés de la chaîne.

Les exemples ci-dessus suppriment uniquement les chaînes des côtés gauche et droit des chaînes. Si vous souhaitez également supprimer des caractères au milieu d'une chaîne, essayez re.sub:

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

Cela devrait imprimer:

astringexample

1347
2017-07-26 20:56



Python trim méthode est appelée strip:

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

55
2018-02-17 10:00



Pour les espaces avant et arrière:

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

Sinon, une expression régulière fonctionne:

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



Vous pouvez également utiliser une fonction très simple et basique: str.replace (), fonctionne avec les espaces et les onglets:

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

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

Simple et facile.


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



Personne n'a encore posté ces solutions regex.

Correspondant à:

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

Recherche (vous devez gérer différemment le cas des "espaces uniquement"):

>>> 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 tu utilises re.sub, vous pouvez supprimer les espaces intérieurs, ce qui pourrait être indésirable.


4
2018-02-12 02:22



Les espaces blancs comprennent espace, onglets et CRLF. Donc, un élégant et bon mot fonction de chaîne, nous pouvons utiliser est Traduire.

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

OU si vous voulez être complet

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

sortie:   please_remove_all_whitespaces


2
2018-06-19 02:58