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 '

Était-ce utile?

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:

  1. L'option globale ( g ) est requise.
  2. L'option insensible à la casse ( i ) ne l'est pas.
  3. Vous pourriez envisager de rechercher uniquement des initiales majuscules ( [: upper:] ).
  4. 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.)
  5. Lisez perldoc perlre pour plus d'informations.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top