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 "

È stato utile?

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:

  1. È richiesta l'opzione globale ( g ).
  2. L'opzione senza distinzione tra maiuscole e minuscole ( i ) non lo è.
  3. Potresti considerare di cercare solo iniziali maiuscole ( [: upper:] ).
  4. Carattere multiplo " iniziali " dovrebbe essere visto con sospetto. (Quindi w + è probabilmente un errore a meno che i tuoi dati non contengano casi pertinenti.)
  5. Leggi perldoc perlre per maggiori informazioni.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top