Expression régulière en Perl

Fermé
dianroca - 22 déc. 2009 à 02:59
{psycho.} Messages postés 101 Date d'inscription mardi 22 décembre 2009 Statut Membre Dernière intervention 4 septembre 2010 - 22 déc. 2009 à 22:10
Bonjour,
Je cherche une expression régulière pour représenter un nom propre décrit par une première lettre en majuscule et les suivants en minuscule. Par exemple "Lemarchand" ou "Perrais". Est il possible également d'avoir une expression régulière qui prend un nom et un prénom. Exemple "Jean Lepigeon" avec une lettre en majuscule pour le début du prénom et du nom.
Si quelqu'un s'y connait un petit peu.
Merci de me venir en aide.
A voir également:

3 réponses

{psycho.} Messages postés 101 Date d'inscription mardi 22 décembre 2009 Statut Membre Dernière intervention 4 septembre 2010 8
22 déc. 2009 à 15:34
Bonjour,

Je pense que ceci devrait passer:

$texte = "Jean Lepigeon";
$texte =~ m/([A-Z]{1}[a-z]+) +([A-Z]{1}[a-z]+)/;
$prenom = $1;
$nom = $2;

$texte = "Jean";
$texte =~ m/([A-Z]{1}[a-z]+)/;
$prenom = $1;

Tiens nous au courant!
0
Bonjour,
Merci j'ai essayé le code et ça marche. Il y a juste un petit défaut. Il prend aussi les mots de début de phrase qui commence toujours par une majuscule. Par exemple s'il existe la chaine "Hello Lemarchand Pierre" dans le fichier, il me renvoi "Hello Lemarchand " seulement et donc considére "Hello" comme un nom ou prénom.
Avez-vous une idée la dessus.
0
Salut,

Il ne faut pas oublier les noms, prénoms avec accent.
#!/usr/bin/perl
use strict;use warnings;

my $texte = "Jean Lepigeon";
my($prenom,$nom) = $texte =~ /([A-Z][a-z]+)\s+([A-Z][a-z]+)/;
print "$nom\n$prenom\n";

my $texte2 = "Eléa Aimée";
my($prenom2,$nom2) = $texte2 =~ /([A-Z][a-z]+)\s+([A-Z][a-z]+)/;
print "$nom2\n$prenom2\n";
__END__


Pour $texte2 la regex ne reconnait pas le motif.

Pour les accents on peut faire par exemple comme ça
#!/usr/bin/perl
use strict;use warnings;

my $texte = "Jean Lepigeon";
my($prenom,$nom) = $texte =~ /([A-Z][a-z]+)\s+([A-Z][a-z]+)/;
print "$nom\n$prenom\n";

my $texte2 = "Eléa Aimée";
my($prenom2,$nom2) = $texte2 =~ /([A-Z\xC0-\xDD][a-z\xE0-\xFF]+)\s+([A-Z\xC0-\xDD][a-z\xE0-\xFF]+)/;
print "$nom2\n$prenom2\n";
__END__
0
{psycho.} Messages postés 101 Date d'inscription mardi 22 décembre 2009 Statut Membre Dernière intervention 4 septembre 2010 8
22 déc. 2009 à 22:10
En effet, je n'avais pas pensé aux prénoms / noms avec accent! En tout cas merci lami20j, je ne connaissais pas la syntaxe :
my($prenom,$nom) = $texte =~ /.../;

Pour ne pas matcher avec les débuts de phrases, tu peux utiliser le signe '^' pour préciser le début de la chaîne :
my($prenom2,$nom2) = $texte2 =~ /^.+([A-Z\xC0-\xDD][a-z\xE0-\xFF]+)\s+([A-Z\xC0-\xDD][a-z\xE0-\xFF]+)/;

Ici, la séquence
^.+
indique qu'il y a au moins 1 caractère, n'importe lequel, au début de la chaîne avant le premier match.
0