Ruby regex: удалить имя, оставить фамилию - PullRequest
0 голосов
/ 01 февраля 2011

Я анализирую текст и хочу игнорировать имена людей.

Примеры (кейсы):

  • Б.Обама => Обама
  • B. Обама => Обама
  • B. Обама => Обама

Мне удалось написать это рабочее регулярное выражение Ruby:

"B.Obama".gsub(/\p{L}+\.(\p{L}+)/, '\\1')

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

Итак, как должно выглядеть регулярное выражение, объединяющее все эти случаи?

Детали: строки Ruby 1.92 и UTF-8.

Ответы [ 2 ]

1 голос
/ 01 февраля 2011

Я немного об этом подумал, и мне это нравится больше:

/^(\w+)[ .,](.+$)/

Это будет захватывать как имя, так и фамилию в разных группах захвата, т.е.* см., например, Rubular: Rubular

Или Попробуйте

^[^ .]+

Это поднимет первое слово в строке.это не ограничено точкой или пробелом.Надеюсь, это поможет, см. Пример на Рубул

0 голосов
/ 01 февраля 2011

Попробуйте

(\w+)$

\w+ соответствует одному или нескольким символам «слова».

$ - это совпадение нулевой длины, соответствующее концу строки.

Хотите ли вы иметь возможность извлекать вторые имена из фрагмента текста? Это может быть очень сложно. Можете ли вы опубликовать выдержку из вашего текста?

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