Savez-vous s'il y a de testeurs gratuits et pas trop compliqués pour apprendre les regex de Perl?
Merci !
j'ai trouvé ça
http://www.solmetra.com/scripts/regex/
mais je n'ai pas compris comment ça marche
Savez-vous s'il y a de testeurs gratuits et pas trop compliqués pour apprendre les regex de Perl?
Merci !
j'ai trouvé ça
http://www.solmetra.com/scripts/regex/
mais je n'ai pas compris comment ça marche
Le one-line perl ?
Exemple :
Et pour extraire des données :
Code : Sélectionner tout - Visualiser dans une fenêtre à part perl -E 'say "mon texte" =~ /ma regexp/ ? "Yes" : "No"'
(one-line écrit pour Unix/Cygwin)
Code : Sélectionner tout - Visualiser dans une fenêtre à part perl -E 'say "Found: ", join ", ", "mon texte" =~ /(\w+)/g'
Oui, un uniligne permet de tester. J'utilise aussi souvent le debugger en mode interactif.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 $ perl -de 42 Loading DB routines from perl5db.pl version 1.32 Editor support available. Enter h or `h h' for help, or `man perldebug' for more help. main::(-e:1): 42 DB<1> print "true" if "mon texte" =~ /mon\s+..x/; true DB<2>
merci pour les réponses!
J'ai trouvé utiles ça
regexlib/
et ça
regex tester
J'ai un petit problème:
Je voudrais identifier avec une expression reg, des noms et prenoms qui se trouvent dans un texte.
Par example le texte pourrait etre:
Michelle Dubois mange une pomme, son fils, Jérèmy Dubois n'aime pas les pommes.
Output:
Michelle Dubois
Jérèmy Dubois
J'avais pensé à ça:
Code : Sélectionner tout - Visualiser dans une fenêtre à part (([A-Z]\w+)\s([A-Z]\w+))+
mais ça ne marche pas
conseils?
Ben, en fait, ça marche partiellement, comme le montre cette session sous le debugger Perl:
Ou même, en utilisant un while et le modificateur /g:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 DB<11> $c = "Michelle Dubois mange une pomme, son fils, Jeremy Dubois n'aime pas les pommes"; DB<12> print "true" if $c =~ /(([A-Z]\w+)\s([A-Z]\w+))+/; true DB<13> print $1 if $c =~ /(([A-Z]\w+)\s([A-Z]\w+))+/; Michelle Dubois DB<14>
Mais si tu as la phrase: "La France est un pays de 550.000 km²", tu vas récupérer "La France", à cause de la majuscule en début de phrase.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 DB<16> $c = "Michelle Dubois mange une pomme, son fils, Jeremy Dubois n'aime pas les pommes" DB<17> print "$1 " while $c =~ /(([A-Z]\w+)\s([A-Z]\w+))+/g; Michelle Dubois Jeremy Dubois DB<18>
(Si tu mets des accents sur Jérémy, ça peut poser des problèmes d'encodage dans certains cas.)
Pour resoudre ce problème on pourrait stocker les noms dans un tableau pour éviter les erreurs!
en fait, pourquoi utiliser \w si l'on peut utiliser [A-Z] ? Pourquoi certain fois il y a des regex très similaires? Quand il est mieux utiliser l'un au lieu de l'autre?
\w représente les caractères alphanumériques (majuscules, minuscules et chiffres) plus le caractère souligné, donc: [A-Za-z0-9_]. C'est beaucoup plus large que [A-Z].
J'ai compris. Donc je peux utiliser quand meme soit [A-Za-z0-9_], soit \w !
J'ai une autre question.
Je voudrais chercher dans un .txt les mots qui ont une double consonne à l'interieur. J'avais pensé à ça:
Mais ça ne marche pas. Je ne comprends pas pourquoi!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 #!usr/bin/perl -w use diagnostics; use warnings; my ($file, $line); my (@words, @duble); $file = "text.txt"; open (F, "<", "$file"); while(defined($line = <F>)) { chomp($line); @words = split(/\pP|\sP|\sS/, $line); @double = grep(/([^aeiouAEIOU]){2}/, @words); print "@double\n"; } close (F);
Pour trouver les doubles consommes, il faut écrire la 2e lettre comme étant identique à la première, comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part /([^aeiouAEIOU])\1/
Ce n'est suffisant que s'il y n'y a que du texte. Cette expression va détecter les doubles chiffres, les doubles espaces, les doubles .., etc.
Je pense qu'une classe de caractère négative n'est pas la bonne solution. Peut-être quelque chose du genre:
/([b-df-hj_np-tvwxzB-B-DF-HJ-NP-TVWXZ])\1/
Exact lolo, j'avais repris la regexp de Jurafsky pour une consonne, sans voir qu'elle était trop large.
j'avais trouvé moi aussi l'expression "\1".. qu'est-ce que ça veut dire? il y a aussi un \2 \3?
est-il la meme chose avec $1, $2 ecc?
Oui, mais à usage exclusif à l'intérieur de l'expression régulière.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager