Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

Python - Evaluation d'une chaine


bblue

Messages recommandés

Salut à tous,

 

Python 2.4

 

j'ai une chaine du genre

string = 'patati et patata blablabla blabla'

 

je voudrais ne récupérer que le 'blablabla blabla'.

 

ne pouvant travailler directement sur une chaine, comment faire proprement ?

merci

Lien vers le commentaire
Partager sur d’autres sites

je voudrais ne récupérer que le 'blablabla blabla'.
Moui.... Avec quelles contraintes ?

On enlève systématiquement "patati et patata " ?

On enlève systématiquement les 17 premiers caractères de la chaine ?

On enlève systématiquement les trois premiers mots ?

On enlève tout ce qui se trouve avant la première occurrence de "bla" ?

 

Autre chose : tu as quels outils à ta disposition ? Des expressions régulières ? Des fonctions de traitement de chaînes "standard" ? (je cherche à comprendre ce que tu entends par "ne pouvant pas travailler directement sur une chaine"...)

Lien vers le commentaire
Partager sur d’autres sites

Salut

 

Oupss !

C'était le soir d'où fatigue et énervement :P

 

Alors, exactement, voici ce qui se passe :

 

1- je récupère une chaine qui est un path :

'prefixe/dossier1/dossier2/suffixe'

 

par exemple : 'home/bblue/test1/test2/exemple/ex_1.txt'

 

on a lors : prefixe = ' home/bblue'

et suffixe = 'exemple/ex_1.txt'

 

sachant que prefixe et suffixe sont variables, que le path peut être un path linux ou windows.

En revanche la chaine 'dossier1/dossier2' (dans l'exemple 'test1/test2') est rigoureusement définie mais elle n'est pas forcément présente dans le path et que je ne peux pas le savoir avant (si elle est présente ou pas) ....

 

2- Si la chaine "dossier1/dossier2' est présente dans le path, alors je dois récupérer que le suffixe

Si la chaine 'dossier1/dossier2' est absente du path, il y aura soit le retour du path complet soit un message d'erreur (préférences de l'utilisateur final)

 

 

Mon pb n'est pas de récupérer le suffixe mais de savoir si 'dossier1/dossier2' est présent et à quel emplacement dans le path ?

Quand je disais que je ne pouvais pas travailler directement sur les chaines, je voulais dire qu'il n'est pas possible de tester directement la présence d'une ss-chaine dans une chaine comme cela existe dans d'autres langages.

 

J'ai bien pensé à chercher les occurences du séparateur ('/' sous linux ou '\' sous windows) pour tester si les x caractères "fixes" suivants étaient présents ou absents, mais je ne trouve pas ça propre et élégant !

 

Voili voilou (si je suis clair sachant qu'on est le lendemain matin d'un vendredi soir ! :P )

Lien vers le commentaire
Partager sur d’autres sites

Quand je disais que je ne pouvais pas travailler directement sur les chaines, je voulais dire qu'il n'est pas possible de tester directement la présence d'une ss-chaine dans une chaine comme cela existe dans d'autres langages.
Je suis perplexe...

Tu n'as pas accès à strstr() ?

Lien vers le commentaire
Partager sur d’autres sites

euh ... il s'agit de Python, pas de PHP !

Je ne connais pas ce genre de fonction en Python et mon moteur de recherche favori ne me dit rien de plus :P

 

Je l'ai codé de cette forme là mais je ne trouve pas ça propre comme code :

"

import re, string

def ma_fonction(chaine)
ssch = 'chaine_reference'
if re.search(ssch, chaine):
	e = string.find(chaine, ssch, 0)
	e +=  len(ssch)
	return chaine[e:]
else:
	 return chaine

"

Lien vers le commentaire
Partager sur d’autres sites

Oups, désolé... J'avais pas percuté que c'était pour du Python.

Ton utilisation des regexp ne me paraît pas "pas propre" comme tu le dis. De toute manière, quand tu n'as pas la fonction que tu veux, tu n'as pas 36000 façons de faire : il faut la coder soi-même !

Et apparemment tu n'as pas le choix. D'après la doc Python pour les chaînes il n'y a pas grand chose d'autre comme fonction à ta disposition...

Lien vers le commentaire
Partager sur d’autres sites

Petite optimisation qui évite l'utilisation d'une expression régulière (qui, il est vrai, ne m'arrangeait pas car le sépérateur windows (l'anti-slash) devait être doublé pour éviter d'être pris pour un caractère spécial et dans ce cas, sous Linux, ça n'allait plus d'où des boucles supplémentaires....

Bref :

 

import string

def ma_fonction(chaine)
ssch = 'chaine_reference'
e = string.find(chaine, ssch, 0)
if e != -1:
	e += len(ssch)
	return chaine[e:]
else:
	return chaine

 

Si ça peut intéresser quelqu'un ...

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...