Regex en python

Fermé
Utilisateur anonyme - 18 janv. 2011 à 00:56
heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 - 18 janv. 2011 à 23:31
Bonjour, voilà ben comme d'hab prob avec les regex en python !!

Je n'arrive pas à reconnaitre cette chaine de caractéres , est je commence à désespérer !!

#age = 25 )


J'utilise pourtant bien
code_ligne="#age = 25 )"
if re.search('^#[a-z-A-Z0-9] = [0-9] \)',code_ligne):


/// qu'est ce qui ne va pas dans ma regex ?? ///

Merci de votre compréhension cordialement tsunaiken !!

3 réponses

jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
18 janv. 2011 à 02:47
Essaye par exemple
if re.search('^#[a-z-A-Z0-9]* = [0-9]* \)',code_ligne)

Johan
0
Utilisateur anonyme
18 janv. 2011 à 20:49
merci ;) ça marche à priori seulement que ça ne prend pas en compte l'espace de fin entre 25 et ) Comment faire dans un cas comme celui la balancer sont pc du haut de l'immeuble ^^ !!

En faite j'ai modifier légèrement mon code pour le prendre en compte bien que j'aimerait quand même savoir pour faire les espaces !!

Sinon j'ai une nouvelle question


pour reconnaître un chaine de caractêre comme celle ci :

ma_variable = """#age = #e + 25 - #b * 42 )"""

Qu'elle regex serait à utiliser dans cette situation ?

J'ai essayer ceci :

if re.search('^#[a-zA-Z0-9]* = [a-zA-Z0-9\+\-\*]*',ma_variable):


Merci de ta compréhension , désoler de te déranger avec mes questions !!
0
heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 131
Modifié par heyquem le 18/01/2011 à 23:38
Salut,


'#age = 25 )'


pour « reconnaitre cette chaine de caractères »:
RE = '#age = \d{2} \)'
re.search(RE, code_ligne)
c'est à dire n'importe où dans le texte


Mais si c'est pour reconnaître plus généralement une chaîne DU GENRE de '#age = 25 )':
RE = '#[a-zA-Z]+ = \d+ \)'


si ça doit être détectée au début DU TEXTE:
RE = '^#[a-zA-Z]+ = \d+ \)'
re.search(RE, code_ligne)
ou bien:
RE = '#[a-zA-Z]+ = \d+ \)'
re.match(RE, code_ligne)


si ça doit être détecté au début D'UNE LIGNE:
RE = '^#[a-zA-Z]+ = \d+ \)'
re.search(RE, code_ligne, re.MULTILINE)


s'il peut y avoir aussi des chiffres avec les lettres dans le mot:
RE = '#[a-zA-Z0-9]+ = \d+ \)'
ou
RE = '^#[a-zA-Z0-9]+ = \d+ \)'




« /// qu'est ce qui ne va pas dans ma regex ?? /// »
Seulement le tiret entre a-z et A-Z



« ça ne prend pas en compte l'espace de fin entre 25 et ) »
Ça veut dire quoi ? Savoir faire quoi ?
Si tu restes aussi vague, on ne peut rien apporter.





ma_variable = """#age = #e + 25 - #b * 42 )"""
RE = '^#[a-zA-Z]+ = [# a-zA-Z0-9+*-]+ \)'


Entre crochets, la plupart des caractères spéciaux perdent leur spécialité.
Sauf le tiret et le ^. Pour les mettre, il faut les placer de telle manière qu'ils ne peuvent pas avoir leur signification habituelle entre-crochets, par exemple pour - au début ou à la fin, mais pas entre deux autres caractères.



« pour reconnaître un chaine de caractères comme celle ci »
«COMME» celle-ci ? Ça veut dire quoi «COMME» ? Qu'est ce qui est susceptible d'être différent et qu'est qui est suceptible d'être identique à ce qui se trouve dans cette chaîne ?

Des questions trop vagues embarassent pour savoir quoi répondre exactement.

Par exemple j'ai mis [a-zA-Z]+ pour la portion "comme" 'age' parce que je ne vois pas pourquoi il y aurait des chiffres là-dedans; mais peut être qu'il y en a en fait.



PS
Par ailleurs, il n'y a que de rares personnes qui répondent à des questions sur Python sur ce forum. Tu aurais certainement intérêt à trouver un forum plus spécialisé. Avec une possibilité de poster du code correctement, et non pas les possibilités rudimentaires d'ici.
0