Lingua::EN::Parse::PersonsName does a pretty good job with this:
Output:#!/usr/bin/perl -wl use strict; use Lingua::EN::Parse::PersonsName; while (<DATA>) { chomp(); # Get rid of the stuff we don't need on either end of the string my ($fullname) = $_ =~ /^\'\s+(.*?)\'$/; my $parser = Lingua::EN::Parse::PersonsName->new($fullname); print join(" ",$parser->fname, $parser->mi, $parser->lname); } __DATA__ ' Smith, John' ' Thompson, Frank A' ' Smith, John A JR' ' Smith, John A III' ' Smith, John A (Johnny)' ' Robert E Smith' ' Fred E.J.K Flintstone III'
(Note that a warning is thrown on the first one when we try to print the middle initial - because there is none.)John Smith Frank A Thompson John A Smith John A Smith John A Smith Robert E Smith Fred E Flintstone
Cheers,
Darren :)
In reply to Re: Newbie parsing problem
by McDarren
in thread Newbie parsing problem
by rtremaine
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |