Come posso rimuovere l'iniziale centrale con un punto alla fine?
-
22-07-2019 - |
Domanda
Ho un sacco di nomi in un campo che portano una seconda iniziale con un '.' alla fine ..
Ho bisogno di una regex per convertire questo esempio:
Kenneth R.
in
Kenneth
I stavo cercando di costruirne uno mio e ho trovato questo utile sito tra ..
http: // www .gskinner.com / RegExr /
ma sono nuovo di Perl & amp; espressioni regolari e potrebbe ottenere solo " ... $ " - il che è inutile quando alla fine del nome non c'è l'iniziale centrale ....
ho appena trovato un altro formato di nome che necessita di considerazione ... 'R. Kelly "deve essere" Kelly "
Soluzione
Per rimuovere l'ultima " parola " se termina con il punto:
my $name =~ s/\w+\.$//i;
(questo suppone che non ci sia spazio dopo)
Per rimuovere qualsiasi parola che termina con punto:
my $name =~ s/\w+\.//i;
guarda il modificatore / g se vuoi rimuoverli tutti ...
e BTW fanno di te un elenco di casi di test per verificare la tua soluzione quindi prova con dati di parole reali, probabilmente otterrai alcune sorprese ...
Altri suggerimenti
Per occuparsi del caso R. Kelly:
s/\w\. *//g
Ecco un breve test:
$ echo 'R. Kelly
Kenneth R.
R. Kemp R.
John Q. Smith' | perl -pe 's/\w\. *//g'
Kelly
Kenneth
Kemp
John Smith
Suggerirei che:
- È richiesta l'opzione globale (
g
). - L'opzione senza distinzione tra maiuscole e minuscole (
i
) non lo è. - Potresti considerare di cercare solo iniziali maiuscole (
[: upper:]
). - Carattere multiplo " iniziali " dovrebbe essere visto con sospetto. (Quindi
w +
è probabilmente un errore a meno che i tuoi dati non contengano casi pertinenti.) - Leggi
perldoc perlre
per maggiori informazioni.