Mais c'est pas forcément le plus facile à maintenir. Les fonctions de manipulation de chaînes de caractère en python sont très puissantes, et on peut faire plein de choses astucieuses.
lines = s.split('n') identifiants = [] descriptions = [] for line in lines: line = line.lstrip() if line.startswith('IDObjet'): identifiants.append( get_quoted(line)) elif line.startswith('DescObjet'): descriptions.append(get_quoted(line)) else: continue
On peut ensuite complexifier en fonction du degré de robustesse qu'on souhaite obtenir, c'est-à-dire le degré de variations qu'on souhaite accepter dans le format d'entrée: comme d'habitude, il convient d'être rigoureux dans ce qu'on produit, et flexible dans ce qu'on accepte comme entrées...
-- Alexandre Fayolle LOGILAB, Paris (France) Formations Python, Zope, Plone, Debian: http://www.logilab.fr/formations Développement logiciel sur mesure: http://www.logilab.fr/services Python et calcul scientifique: http://www.logilab.fr/science
Le 04-05-2006, Bob <Bob@bob.com> nous disait:
Bonjour,
Je galère avec les Regex.
Je me trouves avec un identifiant et une description d'objets.
Ils sont de la forme :
IDObjet("2K46553");
DescObjet("Descrition 2 de l objet");
Je voudrais extraire les information ID et description.
Mais avec re et search je galère pas mal....
Ca peut se faire avec des expressions régulières, par exemple quelque
chose comme:
Mais c'est pas forcément le plus facile à maintenir. Les fonctions de
manipulation de chaînes de caractère en python sont très puissantes, et
on peut faire plein de choses astucieuses.
lines = s.split('n')
identifiants = []
descriptions = []
for line in lines:
line = line.lstrip()
if line.startswith('IDObjet'):
identifiants.append( get_quoted(line))
elif line.startswith('DescObjet'):
descriptions.append(get_quoted(line))
else:
continue
On peut ensuite complexifier en fonction du degré de robustesse qu'on
souhaite obtenir, c'est-à-dire le degré de variations qu'on souhaite
accepter dans le format d'entrée: comme d'habitude, il convient d'être
rigoureux dans ce qu'on produit, et flexible dans ce qu'on accepte comme
entrées...
--
Alexandre Fayolle LOGILAB, Paris (France)
Formations Python, Zope, Plone, Debian: http://www.logilab.fr/formations
Développement logiciel sur mesure: http://www.logilab.fr/services
Python et calcul scientifique: http://www.logilab.fr/science
Mais c'est pas forcément le plus facile à maintenir. Les fonctions de manipulation de chaînes de caractère en python sont très puissantes, et on peut faire plein de choses astucieuses.
lines = s.split('n') identifiants = [] descriptions = [] for line in lines: line = line.lstrip() if line.startswith('IDObjet'): identifiants.append( get_quoted(line)) elif line.startswith('DescObjet'): descriptions.append(get_quoted(line)) else: continue
On peut ensuite complexifier en fonction du degré de robustesse qu'on souhaite obtenir, c'est-à-dire le degré de variations qu'on souhaite accepter dans le format d'entrée: comme d'habitude, il convient d'être rigoureux dans ce qu'on produit, et flexible dans ce qu'on accepte comme entrées...
-- Alexandre Fayolle LOGILAB, Paris (France) Formations Python, Zope, Plone, Debian: http://www.logilab.fr/formations Développement logiciel sur mesure: http://www.logilab.fr/services Python et calcul scientifique: http://www.logilab.fr/science
Eric Deveaud
Bob wrote:
Bonjour,
Je galère avec les Regex.
Je me trouves avec un identifiant et une description d'objets. Ils sont de la forme :
IDObjet("2K46553"); DescObjet("Descrition 2 de l objet");
aparement tu as pour les ID et la description une chaine alphanumerique.
de plus tu as 2 ancres de part et d'autres constantes pour les ID on a partie constante: IDObjet(" et "); partie variable: quelque chose d'alphanumerique de taille au moin 1 non la taille de la chaine ID est-elle fixée ??
je soumetrais a premiere vue un truc du genre pattern_ID = '^IDObjet("(?P<ID>(w).+)");$'
pour les descriptions idem partie constante: DescObjet(" et "); partie variable: quelque chose d'alphanumerique de taille au moin 1 non pattern_DESC= '^DescObjet("(?P<DESC>(w| ).+)");$'
Je voudrais extraire les information ID et description.
import re
s1 = 'IDObjet("2K46553");' s2 = 'DescObjet("Descrition 2 de l objet");'
pattern_ID = '^IDObjet("(?P<ID>(w).+)");$' auto = re.compile(pattern_ID) m = auto.match(s1) if m is not None: id = m.group('ID') print id
pattern_DESC= '^DescObjet("(?P<DESC>(w| ).+)");$' auto = re.compile(pattern_DESC) m = auto.match(s2) if m is not None: desc = m.group('DESC') print desc
Eric
Bob wrote:
Bonjour,
Je galère avec les Regex.
Je me trouves avec un identifiant et une description d'objets.
Ils sont de la forme :
IDObjet("2K46553");
DescObjet("Descrition 2 de l objet");
aparement tu as pour les ID et la description une chaine alphanumerique.
de plus tu as 2 ancres de part et d'autres constantes
pour les ID
on a partie constante: IDObjet(" et ");
partie variable: quelque chose d'alphanumerique de taille au moin 1 non
la taille de la chaine ID est-elle fixée ??
je soumetrais a premiere vue un truc du genre
pattern_ID = '^IDObjet("(?P<ID>(w).+)");$'
pour les descriptions idem
partie constante: DescObjet(" et ");
partie variable: quelque chose d'alphanumerique de taille au moin 1 non
pattern_DESC= '^DescObjet("(?P<DESC>(w| ).+)");$'
Je voudrais extraire les information ID et description.
import re
s1 = 'IDObjet("2K46553");'
s2 = 'DescObjet("Descrition 2 de l objet");'
pattern_ID = '^IDObjet("(?P<ID>(w).+)");$'
auto = re.compile(pattern_ID)
m = auto.match(s1)
if m is not None:
id = m.group('ID')
print id
pattern_DESC= '^DescObjet("(?P<DESC>(w| ).+)");$'
auto = re.compile(pattern_DESC)
m = auto.match(s2)
if m is not None:
desc = m.group('DESC')
print desc
Je me trouves avec un identifiant et une description d'objets. Ils sont de la forme :
IDObjet("2K46553"); DescObjet("Descrition 2 de l objet");
aparement tu as pour les ID et la description une chaine alphanumerique.
de plus tu as 2 ancres de part et d'autres constantes pour les ID on a partie constante: IDObjet(" et "); partie variable: quelque chose d'alphanumerique de taille au moin 1 non la taille de la chaine ID est-elle fixée ??
je soumetrais a premiere vue un truc du genre pattern_ID = '^IDObjet("(?P<ID>(w).+)");$'
pour les descriptions idem partie constante: DescObjet(" et "); partie variable: quelque chose d'alphanumerique de taille au moin 1 non pattern_DESC= '^DescObjet("(?P<DESC>(w| ).+)");$'
Je voudrais extraire les information ID et description.
import re
s1 = 'IDObjet("2K46553");' s2 = 'DescObjet("Descrition 2 de l objet");'
pattern_ID = '^IDObjet("(?P<ID>(w).+)");$' auto = re.compile(pattern_ID) m = auto.match(s1) if m is not None: id = m.group('ID') print id
pattern_DESC= '^DescObjet("(?P<DESC>(w| ).+)");$' auto = re.compile(pattern_DESC) m = auto.match(s2) if m is not None: desc = m.group('DESC') print desc
Eric
Bertrand
Ca march e!!
Merci bcoup !
Bob wrote:
Bonjour,
Je galère avec les Regex.
Je me trouves avec un identifiant et une description d'objets. Ils sont de la forme :
IDObjet("2K46553"); DescObjet("Descrition 2 de l objet");
aparement tu as pour les ID et la description une chaine alphanumerique.
de plus tu as 2 ancres de part et d'autres constantes pour les ID on a partie constante: IDObjet(" et "); partie variable: quelque chose d'alphanumerique de taille au moin 1 non la taille de la chaine ID est-elle fixée ??
je soumetrais a premiere vue un truc du genre pattern_ID = '^IDObjet("(?P<ID>(w).+)");$'
pour les descriptions idem partie constante: DescObjet(" et "); partie variable: quelque chose d'alphanumerique de taille au moin 1 non pattern_DESC= '^DescObjet("(?P<DESC>(w| ).+)");$'
Je voudrais extraire les information ID et description.
import re
s1 = 'IDObjet("2K46553");' s2 = 'DescObjet("Descrition 2 de l objet");'
pattern_ID = '^IDObjet("(?P<ID>(w).+)");$' auto = re.compile(pattern_ID) m = auto.match(s1) if m is not None: id = m.group('ID') print id
pattern_DESC= '^DescObjet("(?P<DESC>(w| ).+)");$' auto = re.compile(pattern_DESC) m = auto.match(s2) if m is not None: desc = m.group('DESC') print desc
Eric
Ca march e!!
Merci bcoup !
Bob wrote:
Bonjour,
Je galère avec les Regex.
Je me trouves avec un identifiant et une description d'objets.
Ils sont de la forme :
IDObjet("2K46553");
DescObjet("Descrition 2 de l objet");
aparement tu as pour les ID et la description une chaine alphanumerique.
de plus tu as 2 ancres de part et d'autres constantes
pour les ID
on a partie constante: IDObjet(" et ");
partie variable: quelque chose d'alphanumerique de taille au moin 1 non
la taille de la chaine ID est-elle fixée ??
je soumetrais a premiere vue un truc du genre
pattern_ID = '^IDObjet("(?P<ID>(w).+)");$'
pour les descriptions idem
partie constante: DescObjet(" et ");
partie variable: quelque chose d'alphanumerique de taille au moin 1 non
pattern_DESC= '^DescObjet("(?P<DESC>(w| ).+)");$'
Je voudrais extraire les information ID et description.
import re
s1 = 'IDObjet("2K46553");'
s2 = 'DescObjet("Descrition 2 de l objet");'
pattern_ID = '^IDObjet("(?P<ID>(w).+)");$'
auto = re.compile(pattern_ID)
m = auto.match(s1)
if m is not None:
id = m.group('ID')
print id
pattern_DESC= '^DescObjet("(?P<DESC>(w| ).+)");$'
auto = re.compile(pattern_DESC)
m = auto.match(s2)
if m is not None:
desc = m.group('DESC')
print desc
Je me trouves avec un identifiant et une description d'objets. Ils sont de la forme :
IDObjet("2K46553"); DescObjet("Descrition 2 de l objet");
aparement tu as pour les ID et la description une chaine alphanumerique.
de plus tu as 2 ancres de part et d'autres constantes pour les ID on a partie constante: IDObjet(" et "); partie variable: quelque chose d'alphanumerique de taille au moin 1 non la taille de la chaine ID est-elle fixée ??
je soumetrais a premiere vue un truc du genre pattern_ID = '^IDObjet("(?P<ID>(w).+)");$'
pour les descriptions idem partie constante: DescObjet(" et "); partie variable: quelque chose d'alphanumerique de taille au moin 1 non pattern_DESC= '^DescObjet("(?P<DESC>(w| ).+)");$'
Je voudrais extraire les information ID et description.
import re
s1 = 'IDObjet("2K46553");' s2 = 'DescObjet("Descrition 2 de l objet");'
pattern_ID = '^IDObjet("(?P<ID>(w).+)");$' auto = re.compile(pattern_ID) m = auto.match(s1) if m is not None: id = m.group('ID') print id
pattern_DESC= '^DescObjet("(?P<DESC>(w| ).+)");$' auto = re.compile(pattern_DESC) m = auto.match(s2) if m is not None: desc = m.group('DESC') print desc
Eric
Cémoi
<snip>
Je voudrais extraire les information ID et description.
import re
s1 = 'IDObjet("2K46553");' s2 = 'DescObjet("Descrition 2 de l objet");'
pattern_ID = '^IDObjet("(?P<ID>(w).+)");$' auto = re.compile(pattern_ID) m = auto.match(s1) if m is not None: id = m.group('ID') print id
pattern_DESC= '^DescObjet("(?P<DESC>(w| ).+)");$' auto = re.compile(pattern_DESC) m = auto.match(s2) if m is not None: desc = m.group('DESC') print desc
On peut aussi définir un motif de maniere bavarde: c'est plus facile à lire et donc à maintenir. Je n'ai récrit que pour IDObjet:
import re
s1 = 'IDObjet("2K46553");'
pattern_ID = """ ^ # debut de chaine IDObjet # motif 'IDobjet' (" # a partir de parenthese ouvrante + guillemet, (?P<ID>(w).+) # capture le mot avec un identifiant 'ID', "); # jusqu'au guillemet + parenthese fermante $ # suivi d'une fin de ligne """ auto = re.compile(pattern_ID, re.VERBOSE) m = auto.match(s1) if m is not None: id = m.group('ID') # recupere le groupe 'ID' print id
Laurent
P.S.: tu peux jeter un oeil ici, il y a des infos utiles: http://diveintopython.adrahon.org/regular_expressions/index.html
Eric
<snip>
Je voudrais extraire les information ID et description.
import re
s1 = 'IDObjet("2K46553");'
s2 = 'DescObjet("Descrition 2 de l objet");'
pattern_ID = '^IDObjet("(?P<ID>(w).+)");$'
auto = re.compile(pattern_ID)
m = auto.match(s1)
if m is not None:
id = m.group('ID')
print id
pattern_DESC= '^DescObjet("(?P<DESC>(w| ).+)");$'
auto = re.compile(pattern_DESC)
m = auto.match(s2)
if m is not None:
desc = m.group('DESC')
print desc
On peut aussi définir un motif de maniere bavarde: c'est plus facile à
lire et donc à maintenir.
Je n'ai récrit que pour IDObjet:
import re
s1 = 'IDObjet("2K46553");'
pattern_ID = """
^ # debut de chaine
IDObjet # motif 'IDobjet'
(" # a partir de parenthese ouvrante + guillemet,
(?P<ID>(w).+) # capture le mot avec un identifiant 'ID',
"); # jusqu'au guillemet + parenthese fermante
$ # suivi d'une fin de ligne
"""
auto = re.compile(pattern_ID, re.VERBOSE)
m = auto.match(s1)
if m is not None:
id = m.group('ID') # recupere le groupe 'ID'
print id
Laurent
P.S.: tu peux jeter un oeil ici, il y a des infos utiles:
http://diveintopython.adrahon.org/regular_expressions/index.html
Je voudrais extraire les information ID et description.
import re
s1 = 'IDObjet("2K46553");' s2 = 'DescObjet("Descrition 2 de l objet");'
pattern_ID = '^IDObjet("(?P<ID>(w).+)");$' auto = re.compile(pattern_ID) m = auto.match(s1) if m is not None: id = m.group('ID') print id
pattern_DESC= '^DescObjet("(?P<DESC>(w| ).+)");$' auto = re.compile(pattern_DESC) m = auto.match(s2) if m is not None: desc = m.group('DESC') print desc
On peut aussi définir un motif de maniere bavarde: c'est plus facile à lire et donc à maintenir. Je n'ai récrit que pour IDObjet:
import re
s1 = 'IDObjet("2K46553");'
pattern_ID = """ ^ # debut de chaine IDObjet # motif 'IDobjet' (" # a partir de parenthese ouvrante + guillemet, (?P<ID>(w).+) # capture le mot avec un identifiant 'ID', "); # jusqu'au guillemet + parenthese fermante $ # suivi d'une fin de ligne """ auto = re.compile(pattern_ID, re.VERBOSE) m = auto.match(s1) if m is not None: id = m.group('ID') # recupere le groupe 'ID' print id
Laurent
P.S.: tu peux jeter un oeil ici, il y a des infos utiles: http://diveintopython.adrahon.org/regular_expressions/index.html