Сокращайте имена, используя регулярные выражения в символьных ограничениях. - PullRequest
0 голосов
/ 01 марта 2020

Я хочу сокращать имена людей, используя замены регулярных выражений, и ниже приведено руководство.

  • Имена разделяются словом and.
  • Существует уникальная запятая , в каждом имени, которое разделяет фамилию и имя.
  • Для каждой части имени оставляйте только его начальную букву.
  • Удалите все запятые ,, точки . и гипс -.
  • Заменить каждое слово and на гипс -.
  • Удалить все пробелы .

Ниже приведен список примеров сокращения отдельных имен.

  • Gelfand, Israel -> GelfandI
  • de Giorgi, Ennio -> deGioriE
  • Jones, Vaughan Frederick Randal -> JonesVFR
  • Serre, Jean-Pierre -> SerreJP
  • Siegel, Carl L. -> SiegelCL
  • Piatetski-Shapiro, Ilya -> PiatetskiShapiroI

Вот пример сокращения списка имен.

Gelfand, Israel and de Giorgi, Ennio and Jones, Vaughan Frederick Randal and Serre, Jean-Pierre and Siegel, Carl L. and Piatetski-Shapiro, Ilya
->
GelfandI-deGioriE-JonesVFR-SerreJP-SiegelCL-PiatetskiShapiroI

Это довольно легко сделать, используя конечную цепочку замен регулярного выражения. Однако я столкнулся с некоторыми дополнительными ограничениями.

  • Не допускается использование любого из четырех символов /\[].
  • Пустая строка не допускается.

В частности, эти два ограничения подразумевают, что:

  • Побег невозможен;
  • Удаление любых совпавших узоров, особенно точек ., не тривиально.

Я хотел бы знать, возможно ли это сделать при этих ограничениях. Меня особенно интересуют регулярные выражения в Java, но приветствуются любые диалекты.

1 Ответ

0 голосов
/ 01 марта 2020

Кажется, работает следующий шаблон регулярных выражений:

(?<=[A-Z])(?!.*,)[a-z]*\.?|[, -]

Демо

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