Как я могу удалить средний инициал с точкой в ​​конце? - PullRequest
3 голосов
/ 15 января 2009

У меня есть группа имен в поле, которые имеют среднюю букву с '.' в конце ..

Мне нужно регулярное выражение для преобразования этого примера:

Кеннет Р.

в

Кеннет

I пытался создать свой собственный и нашел этот полезный сайт кстати ..

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

but Я новичок в Perl и регулярных выражениях и мог получить только "... $" - что бесполезно, когда нет среднего инициала в конце имени ....


Я просто нашел другой формат имени, который требует рассмотрения ... 'Р. Келли "должна быть" Келли "

Ответы [ 2 ]

3 голосов
/ 15 января 2009

Удалить последнее «слово», если оно оканчивается точкой:

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

(предполагается, что после этого у вас нет места)

Чтобы удалить любое слово, заканчивающееся точкой:

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

посмотрите на модификатор / g, если вы хотите удалить их все ...

и BTW составляют тестовый список для проверки вашего решения тогда попробуйте с реальными данными слова, вы, вероятно, получите некоторые сюрпризы ...

2 голосов
/ 16 января 2009

Чтобы позаботиться о деле Р. Келли:

s/\w\. *//g

Вот быстрый тест:

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

Я бы предложил, чтобы:

  1. Требуется глобальная опция (g).
  2. Опция без учета регистра (i) - нет.
  3. Возможно, вам стоит поискать только заглавные ([:upper:]) инициалы.
  4. Несколько символов инициалы следует рассматривать с подозрением. (Так что w+, вероятно, является ошибкой, если ваши данные не имеют соответствующих случаев.)
  5. Прочитайте perldoc perlre для получения дополнительной информации.
...