236 votes

Comment supprimer tous les caractères après un caractère spécifique en python ?

J'ai une ficelle. Comment supprimer tout le texte après un certain caractère ? ( Dans ce cas ... )
Le texte suivant ... C'est pourquoi je souhaite supprimer tous les caractères après un certain nombre d'entre eux.

397voto

Ned Batchelder Points 128913

Partagez votre séparateur au maximum une fois, et prenez le premier morceau :

sep = '...'
stripped = text.split(sep, 1)[0]

Vous n'avez pas dit ce qui doit se passer si le séparateur n'est pas présent. Tant ceci que La solution d'Alex renverra la chaîne entière dans ce cas.

134voto

Ayman Hourieh Points 39435

En supposant que votre séparateur soit '...', il peut s'agir de n'importe quelle chaîne de caractères.

text = 'some string... this part will be removed.'
head, sep, tail = text.partition('...')

>>> print head
some string

Si le séparateur n'est pas trouvé, head contiendra la totalité de la chaîne originale.

En partition a été ajoutée dans Python 2.5.

S.partition(sep) -> (head, sep, tail)

Recherche du séparateur sep en S et renvoie la partie précédente, le séparateur lui-même, et la partie qui le suit. Si le séparateur n'est pas n'est pas trouvé, il renvoie S et deux chaînes vides.

30voto

zatch_rulz Points 309

Si vous souhaitez supprimer tout ce qui se trouve après la dernière occurrence du séparateur dans une chaîne, je trouve que cela fonctionne bien :

<separator>.join(string_to_split.split(<separator>)[:-1])

Par exemple, si string_to_split est un chemin comme root/location/child/too_far.exe et que vous ne voulez que le chemin d'accès au dossier, vous pouvez diviser par "/".join(string_to_split.split("/")[:-1]) et vous obtiendrez root/location/child

11voto

Alex Martelli Points 330805

Sans expression régulière (ce que je suppose être ce que vous voulez) :

def remafterellipsis(text):
  where_ellipsis = text.find('...')
  if where_ellipsis == -1:
    return text
  return text[:where_ellipsis + 3]

ou, avec une expression régulière :

import re

def remwithre(text, there=re.compile(re.escape('...')+'.*')):
  return there.sub('', text)

6voto

Marcus Points 39
import re
test = "This is a test...we should not be able to see this"
res = re.sub(r'\.\.\..*',"",test)
print(res)

Sortie : "Ceci est un test"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X