J'ai un problème avec les regexp.
Mon but est de chercher à extraire les adresses email (mais ça peut être
autre chose de bien structuré) d'un fichier texte quelconque. Un exemple
ici, mais que j'ai du mal à comprendre:
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/138889
Je ne comprend pas comment convertir "en Français" ceci:
[...]
mailsrch = re.compile(r'[\w\-][\w\-\.]+@[\w\-][\w\-\.]+[a-zA-Z]{1,4}')
[...]
Quelqu'un veut bien m'aider? Spécialement:
- Pourquoi [\w\-][\w\-\.]?
J'ai lu un fois ceci avant de poster:
http://www.amk.ca/python/howto/regex/
--
Telephone portable "intelligent" (SmartPhone) GSM, GPRS,...
Il est sous Linux, ne coute pas trop cher,...
http://www.it2l.com/product_info.php?cPath=91&products_id=456
w = word character, N'importe quel caractère alphanumérique. Donc on cherche un caractère alphanumérique ou '-' puis un nombre indéfini (supérieur ou égal à 1) de caractères alphanumériques, '-', ou '.'. Ensuite on veut @ et c'est reparti.
C'est pas terrible du tout pour valider une adresse email.
Quelqu'un veut bien m'aider?
w = word character, N'importe quel caractère alphanumérique.
Donc on cherche un caractère alphanumérique ou '-' puis un nombre
indéfini (supérieur ou égal à 1) de caractères alphanumériques, '-', ou '.'.
Ensuite on veut @ et c'est reparti.
C'est pas terrible du tout pour valider une adresse email.
w = word character, N'importe quel caractère alphanumérique. Donc on cherche un caractère alphanumérique ou '-' puis un nombre indéfini (supérieur ou égal à 1) de caractères alphanumériques, '-', ou '.'. Ensuite on veut @ et c'est reparti.
C'est pas terrible du tout pour valider une adresse email.
R12y
On Sat, 17 Dec 2005 03:29:21 +0100, loufoque wrote:
C'est pas terrible du tout pour valider une adresse email.
Oui, je ma disais bien. En relisant encore et encore, j'ai pris ma propre regexp: [w_-.]+@[w_-.]+
C'est toujours pas génial, mais ça colle mieux avec le texte à parser et ce que j'ai en tête...
Merci en tout cas. -- Telephone portable "intelligent" (SmartPhone) GSM, GPRS,... Il est sous Linux, ne coute pas trop cher,... http://www.it2l.com/product_info.php?cPath&products_idE6
On Sat, 17 Dec 2005 03:29:21 +0100, loufoque wrote:
C'est pas terrible du tout pour valider une adresse email.
Oui, je ma disais bien. En relisant encore et encore, j'ai pris ma propre
regexp:
[w_-.]+@[w_-.]+
C'est toujours pas génial, mais ça colle mieux avec le texte à parser et
ce que j'ai en tête...
Merci en tout cas.
--
Telephone portable "intelligent" (SmartPhone) GSM, GPRS,...
Il est sous Linux, ne coute pas trop cher,...
http://www.it2l.com/product_info.php?cPath&products_idE6
On Sat, 17 Dec 2005 03:29:21 +0100, loufoque wrote:
C'est pas terrible du tout pour valider une adresse email.
Oui, je ma disais bien. En relisant encore et encore, j'ai pris ma propre regexp: [w_-.]+@[w_-.]+
C'est toujours pas génial, mais ça colle mieux avec le texte à parser et ce que j'ai en tête...
Merci en tout cas. -- Telephone portable "intelligent" (SmartPhone) GSM, GPRS,... Il est sous Linux, ne coute pas trop cher,... http://www.it2l.com/product_info.php?cPath&products_idE6
loufoque
C'est toujours pas génial, mais ça colle mieux avec le texte à parser et ce que j'ai en tête...
On Sat, 17 Dec 2005 14:54:03 +0100, Franssoa wrote:
C'est toujours pas génial, mais ça colle mieux avec le texte à parser et ce que j'ai en tête... Ça c'est pas mal.
^[a-zA-Z][w.-]*@([a-zA-Z][a-zA-Z0-9-]*.)+[a-zA-Z]{2,4}$ Ne manquerait-il pas le caractère '_' () ?
Si, et aussi le "" devant certains "-". J'ai tenté l'usage des "()" chez moi, mais ça a foiré de chez foiré... Je l'ai joué en répétitif (copier coller de "[w_-]+[.]" quatre fois...) :-P
Mais on s'est tous compris :-)
-- Telephone portable "intelligent" (SmartPhone) GSM, GPRS,... Il est sous Linux, ne coute pas trop cher,... http://www.it2l.com/product_info.php?cPath&products_idE6
On Sat, 17 Dec 2005 14:54:03 +0100, Franssoa wrote:
C'est toujours pas génial, mais ça colle mieux avec le texte à parser et
ce que j'ai en tête...
Ça c'est pas mal.
^[a-zA-Z][w.-]*@([a-zA-Z][a-zA-Z0-9-]*.)+[a-zA-Z]{2,4}$
Ne manquerait-il pas le caractère '_' (mon_email@mon_provider.co.jp) ?
Si, et aussi le "" devant certains "-".
J'ai tenté l'usage des "()" chez moi, mais ça a foiré de chez foiré...
Je l'ai joué en répétitif (copier coller de "[w_-]+[.]" quatre fois...)
:-P
Mais on s'est tous compris :-)
--
Telephone portable "intelligent" (SmartPhone) GSM, GPRS,...
Il est sous Linux, ne coute pas trop cher,...
http://www.it2l.com/product_info.php?cPath&products_idE6
On Sat, 17 Dec 2005 14:54:03 +0100, Franssoa wrote:
C'est toujours pas génial, mais ça colle mieux avec le texte à parser et ce que j'ai en tête... Ça c'est pas mal.
^[a-zA-Z][w.-]*@([a-zA-Z][a-zA-Z0-9-]*.)+[a-zA-Z]{2,4}$ Ne manquerait-il pas le caractère '_' () ?
Si, et aussi le "" devant certains "-". J'ai tenté l'usage des "()" chez moi, mais ça a foiré de chez foiré... Je l'ai joué en répétitif (copier coller de "[w_-]+[.]" quatre fois...) :-P
Mais on s'est tous compris :-)
-- Telephone portable "intelligent" (SmartPhone) GSM, GPRS,... Il est sous Linux, ne coute pas trop cher,... http://www.it2l.com/product_info.php?cPath&products_idE6
loufoque
Ne manquerait-il pas le caractère '_' () ?
w contient _ normalement (enfin j'ai pas testé en python)
Ne manquerait-il pas le caractère '_' (mon_email@mon_provider.co.jp) ?
w contient _ normalement (enfin j'ai pas testé en python)
-- Telephone portable "intelligent" (SmartPhone) GSM, GPRS,... Il est sous Linux, ne coute pas trop cher,... http://www.it2l.com/product_info.php?cPath&products_idE6
On Sat, 17 Dec 2005 20:03:55 +0100, loufoque wrote:
Ne manquerait-il pas le caractère '_' (mon_email@mon_provider.co.jp) ?
w contient _ normalement (enfin j'ai pas testé en python)
--
Telephone portable "intelligent" (SmartPhone) GSM, GPRS,...
Il est sous Linux, ne coute pas trop cher,...
http://www.it2l.com/product_info.php?cPath&products_idE6
-- Telephone portable "intelligent" (SmartPhone) GSM, GPRS,... Il est sous Linux, ne coute pas trop cher,... http://www.it2l.com/product_info.php?cPath&products_idE6
Sébastien Kirche
Le 17 décembre 2005 à 14:12, Franssoa s'est exprimé ainsi :
Ça c'est pas mal. ^[a-zA-Z][w.-]*@([a-zA-Z][a-zA-Z0-9-]*.)+[a-zA-Z]{2,4}$
Ne manquerait-il pas le caractère '_' () ?
Il me semble qu'il n'y a pas de _ possible dans une nom de domaine (La rfc1035 semble le confirmer mais je ne suis pas un familier de l'interprétation des rfc).
Par contre il est possible d'avoir un + dans le nom de boîte. Moi je dirais :
Le 17 décembre 2005 à 14:12, Franssoa s'est exprimé ainsi :
Ça c'est pas mal.
^[a-zA-Z][w.-]*@([a-zA-Z][a-zA-Z0-9-]*.)+[a-zA-Z]{2,4}$
Ne manquerait-il pas le caractère '_' (mon_email@mon_provider.co.jp) ?
Il me semble qu'il n'y a pas de _ possible dans une nom de domaine (La
rfc1035 semble le confirmer mais je ne suis pas un familier de
l'interprétation des rfc).
Par contre il est possible d'avoir un + dans le nom de boîte. Moi je
dirais :
Le 17 décembre 2005 à 14:12, Franssoa s'est exprimé ainsi :
Ça c'est pas mal. ^[a-zA-Z][w.-]*@([a-zA-Z][a-zA-Z0-9-]*.)+[a-zA-Z]{2,4}$
Ne manquerait-il pas le caractère '_' () ?
Il me semble qu'il n'y a pas de _ possible dans une nom de domaine (La rfc1035 semble le confirmer mais je ne suis pas un familier de l'interprétation des rfc).
Par contre il est possible d'avoir un + dans le nom de boîte. Moi je dirais :
Justement je viens de faire des tests. Soit une version simplifiée de l'expression rationnalle, et une chaine de test relativement simple.
In [75]: ch_test Out[75]: ', , , ' In [76]: exp_rat_1=re.compile(r'[w-.]+[@][w-.]+') In [77]: exp_rat_2=re.compile(r'^[w-.]+[@][w-.]+$') In [78]: exp_rat_1.findall(ch_test) Out[78]: ['', '', '', ''] In [79]: exp_rat_2.findall(ch_test) Out[79]: []
Je vois un problème car en [78], je lui demande de chercher toute chaine de caractère [...snip la traduction d'une regexp...], tandis que en [79], la seule différence, c'est que je lui demande de chercher toutes les chaines qui _commencent_ par [...snip la traduction d'une regexp...] et _fini par [...snip la traduction d'une regexp...].
En fait je ne comprends pas le comportement du programme là. Il ne se justifie que si les "^" et "$" impliquent que la chaine _entière_ (pas une sous-chaine de celle-ci) qui est présentée doit vérifier l'expression régulière. En gros: "pas de (^,$)" => "travailler sur des sous-chaine" "avec (^,$)" => "ne considérer que l'intégralité de la chaine"
-- Telephone portable "intelligent" (SmartPhone) GSM, GPRS,... Il est sous Linux, ne coute pas trop cher,... http://www.it2l.com/product_info.php?cPath&products_idE6
Justement je viens de faire des tests.
Soit une version simplifiée de l'expression rationnalle, et une chaine de
test relativement simple.
In [75]: ch_test
Out[75]: 'erhxnxtrx@bzpmxxl.com, gxnoerdy@msn.com, gxox@bzpmxxl.fr, hxjx_939@bzpmxxl.com'
In [76]: exp_rat_1=re.compile(r'[w-.]+[@][w-.]+')
In [77]: exp_rat_2=re.compile(r'^[w-.]+[@][w-.]+$')
In [78]: exp_rat_1.findall(ch_test)
Out[78]:
['erhxnxtrx@bzpmxxl.com',
'gxnoerdy@msn.com',
'gxox@bzpmxxl.fr',
'hxjx_939@bzpmxxl.com']
In [79]: exp_rat_2.findall(ch_test)
Out[79]: []
Je vois un problème car en [78], je lui demande de chercher toute chaine
de caractère [...snip la traduction d'une regexp...], tandis que en [79],
la seule différence, c'est que je lui demande de chercher toutes les
chaines qui _commencent_ par [...snip la traduction d'une regexp...] et
_fini par [...snip la traduction d'une regexp...].
En fait je ne comprends pas le comportement du programme là.
Il ne se justifie que si les "^" et "$" impliquent que la chaine _entière_
(pas une sous-chaine de celle-ci) qui est présentée doit vérifier
l'expression régulière.
En gros:
"pas de (^,$)" => "travailler sur des sous-chaine"
"avec (^,$)" => "ne considérer que l'intégralité de la chaine"
--
Telephone portable "intelligent" (SmartPhone) GSM, GPRS,...
Il est sous Linux, ne coute pas trop cher,...
http://www.it2l.com/product_info.php?cPath&products_idE6
Justement je viens de faire des tests. Soit une version simplifiée de l'expression rationnalle, et une chaine de test relativement simple.
In [75]: ch_test Out[75]: ', , , ' In [76]: exp_rat_1=re.compile(r'[w-.]+[@][w-.]+') In [77]: exp_rat_2=re.compile(r'^[w-.]+[@][w-.]+$') In [78]: exp_rat_1.findall(ch_test) Out[78]: ['', '', '', ''] In [79]: exp_rat_2.findall(ch_test) Out[79]: []
Je vois un problème car en [78], je lui demande de chercher toute chaine de caractère [...snip la traduction d'une regexp...], tandis que en [79], la seule différence, c'est que je lui demande de chercher toutes les chaines qui _commencent_ par [...snip la traduction d'une regexp...] et _fini par [...snip la traduction d'une regexp...].
En fait je ne comprends pas le comportement du programme là. Il ne se justifie que si les "^" et "$" impliquent que la chaine _entière_ (pas une sous-chaine de celle-ci) qui est présentée doit vérifier l'expression régulière. En gros: "pas de (^,$)" => "travailler sur des sous-chaine" "avec (^,$)" => "ne considérer que l'intégralité de la chaine"
-- Telephone portable "intelligent" (SmartPhone) GSM, GPRS,... Il est sous Linux, ne coute pas trop cher,... http://www.it2l.com/product_info.php?cPath&products_idE6
Sébastien Kirche
Le 18 décembre 2005 à 20:12, R12y a formulé :
En fait je ne comprends pas le comportement du programme là. Il ne se justifie que si les "^" et "$" impliquent que la chaine _entière_ (pas une sous-chaine de celle-ci) qui est présentée doit vérifier l'expression régulière. En gros: "pas de (^,$)" => "travailler sur des sous-chaine" "avec (^,$)" => "ne considérer que l'intégralité de la chaine"
Ben, oui c'est la syntaxe classique des regexps là.
^ marque le début d'une ligne et $ marque la fin. Donc la regexp dont on parle ne fonctionne que sur une chaîne contenant uniquement une adresse mail.
Ah effectivement en relisant le message du début du fil ce n'est pas ce que voulais. J'avais compris que tu cherchais une regexp pour vérifier la validité syntaxique d'une adresse.
Donc effectivement pour extraire toute les adresses qui seraient présentes dans un texte il ne faut pas ^ ni $.
-- Sébastien Kirche
Le 18 décembre 2005 à 20:12, R12y a formulé :
En fait je ne comprends pas le comportement du programme là. Il ne se
justifie que si les "^" et "$" impliquent que la chaine _entière_ (pas
une sous-chaine de celle-ci) qui est présentée doit vérifier
l'expression régulière. En gros: "pas de (^,$)" => "travailler sur des
sous-chaine" "avec (^,$)" => "ne considérer que l'intégralité de la
chaine"
Ben, oui c'est la syntaxe classique des regexps là.
^ marque le début d'une ligne et $ marque la fin. Donc la regexp dont on
parle ne fonctionne que sur une chaîne contenant uniquement une adresse
mail.
Ah effectivement en relisant le message du début du fil ce n'est pas ce
que voulais. J'avais compris que tu cherchais une regexp pour vérifier
la validité syntaxique d'une adresse.
Donc effectivement pour extraire toute les adresses qui seraient
présentes dans un texte il ne faut pas ^ ni $.
En fait je ne comprends pas le comportement du programme là. Il ne se justifie que si les "^" et "$" impliquent que la chaine _entière_ (pas une sous-chaine de celle-ci) qui est présentée doit vérifier l'expression régulière. En gros: "pas de (^,$)" => "travailler sur des sous-chaine" "avec (^,$)" => "ne considérer que l'intégralité de la chaine"
Ben, oui c'est la syntaxe classique des regexps là.
^ marque le début d'une ligne et $ marque la fin. Donc la regexp dont on parle ne fonctionne que sur une chaîne contenant uniquement une adresse mail.
Ah effectivement en relisant le message du début du fil ce n'est pas ce que voulais. J'avais compris que tu cherchais une regexp pour vérifier la validité syntaxique d'une adresse.
Donc effectivement pour extraire toute les adresses qui seraient présentes dans un texte il ne faut pas ^ ni $.