Frage

Ich habe ein paar Vornamen in einem Feld, die eine mittlere Initial mit einem '.' Am Ende..

Ich benötige einen regulären Ausdruck, um dieses Beispiel zu konvertieren:

Kenneth R.

hinein

Kenneth

Ich habe versucht, meine eigene zu erstellen und bin übrigens auf diese nützliche Seite gestoßen.

http://www.gskinner.com/RegExr/

aber ich bin neu in Perl und regulären Ausdrücken und konnte nur „...$“ bekommen – was nutzlos ist, wenn am Ende des Vornamens kein mittlerer Anfangsbuchstabe steht....


Ich habe gerade ein anderes Namensformat gefunden, das berücksichtigt werden muss ...'R.„Kelly“ muss „Kelly“ sein

War es hilfreich?

Lösung

Um das letzte „Wort“ zu entfernen, wenn es mit dem Punkt endet:

my $name =~ s/\w+\.$//i;

(dies setzt voraus, Sie haben keinen Platz danach)

ein beliebiges Wort entfernen mit Punkt endet:

my $name =~ s/\w+\.//i;

Blick auf die / g Modifikator, wenn Sie wollen, dass sie alle ... entfernen

und machen Sie sich BTW einen Testfall-Liste Ihre Lösung zu überprüfen dann mit echten Wortdaten versuchen, werden Sie wahrscheinlich einige Überraschungen, ...

Andere Tipps

Sich um den R kümmern.Kelly-Fall:

s/\w\. *//g

Hier ein kurzer Test:

$ echo 'R. Kelly
Kenneth R.
R. Kemp R.
John Q. Smith' | perl -pe 's/\w\. *//g'
Kelly
Kenneth 
Kemp 
John Smith

Ich würde Folgendes vorschlagen:

  1. Die globale Option (g) ist erforderlich.
  2. Die Option ohne Berücksichtigung der Groß-/Kleinschreibung (i) ist es nicht.
  3. Sie könnten erwägen, nach Großbuchstaben zu suchen ([:upper:]) nur Initialen.
  4. „Initialen“ mit mehreren Zeichen sollten mit Argwohn betrachtet werden.(Also w+ ist wahrscheinlich ein Fehler, es sei denn, Ihre Daten enthalten relevante Fälle.)
  5. Lesen perldoc perlre für mehr Informationen.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top