Как я могу разделить «фамилия, имя» на отдельные строки? - PullRequest
3 голосов
/ 23 декабря 2008

Какой лучший способ разделить строку «Parisi, Kenneth» на «Kenneth» и «Parisi»?
Я все еще учусь разбирать строки с помощью этих регулярных выражений, но не слишком разбираюсь в том, как устанавливать переменные равными сопоставленной строке и выводу сопоставленной (или несовпадающей) строки.

Ответы [ 2 ]

13 голосов
/ 23 декабря 2008
my ($lname, $fname) = split(/,\s*/, $fullname, 2);

Обратите внимание на третий аргумент, который ограничивает результаты двумя. Не обязательно, но хорошая практика все же imho.

2 голосов
/ 23 декабря 2008

Что-то вроде этого должно сработать для имен без символов юникода:

my ($lname,$fname) = ($1,$2) if $var =~ /([a-z]+),\s+([a-z]+)/i;

Чтобы разбить его:

  • ([a-z]+) соответствует серии символов и присваивает ее первой группе $ 1
  • , соответствует запятой
  • \s+ соответствует одному или нескольким пробелам (если пробелы необязательны, измените + на *)
  • ([a-z]+) соответствует серии символов и присваивает ее второй группе $ 2
  • i совпадение без учета регистра

Вы можете изменить класс символов [a-z], включив в него символы, которые, по вашему мнению, являются допустимыми для имен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...