Comment puis-je supprimer l'initiale du deuxième prénom avec un point à la fin?
-
22-07-2019 - |
Question
J'ai un groupe de prénoms dans un champ qui portent une initiale avec un '.' à la fin ..
J'ai besoin d'une regex pour convertir cet exemple:
Kenneth R.
en
Kenneth
I essayait de construire le mien et a trouvé ce site utile entre autres ..
http: // www .gskinner.com / RegExr /
mais je suis nouveau sur Perl & amp; expressions régulières et ne peut obtenir que "... $". - ce qui est inutile s'il n'y a pas d'initiale du prénom à la fin du prénom ...
Je viens de trouver un autre format de nom qui mérite d'être pris en compte ... "R. Kelly 'doit être' Kelly '
La solution
Pour supprimer le dernier " mot " si elle se termine par un point:
my $name =~ s/\w+\.$//i;
(cela suppose que vous n'ayez plus d'espace après cela)
Pour supprimer tout mot se terminant par un point:
my $name =~ s/\w+\.//i;
regardez le modificateur / g si vous voulez les supprimer tous ...
et BTW établissent vous-même une liste de tests pour vérifier votre solution puis essayez avec de vraies données de mots, vous aurez probablement des surprises ...
Autres conseils
S'occuper de l'affaire R. Kelly:
s/\w\. *//g
Voici un test rapide:
$ echo 'R. Kelly
Kenneth R.
R. Kemp R.
John Q. Smith' | perl -pe 's/\w\. *//g'
Kelly
Kenneth
Kemp
John Smith
Je suggérerais que:
- L'option globale (
g
) est requise. - L'option insensible à la casse (
i
) ne l'est pas. - Vous pourriez envisager de rechercher uniquement des initiales majuscules (
[: upper:]
). - Caractères multiples "Initiales" devrait être considéré avec suspicion. (Donc,
w +
est probablement une erreur, sauf si vos données ont des cas pertinents.) - Lisez
perldoc perlre
pour plus d'informations.