RegEx для добавления запятой и пробела между именами - PullRequest
1 голос
/ 30 апреля 2019

У меня есть список имен, в которых фамилии и имена появляются вместе:

BorisovaSvetlana A.; KimHak Joong; PuXiaotao; LiuHung-wen*

Я хотел бы добавить запятую и пробел между фамилиями и именами, чтобы вывод был:

Borisova, Svetlana A.; Kim, Hak Joong; Pu, Xiaotao; Liu, Hung-wen*

Я использую узел манипуляции строк в KNIME, и я думаю, что будет использоваться regexReplace($col1$, ,"") и, возможно, какой-то упреждающий взгляд, использующий [az] и [AZ] для поиска экземпляров строчной буквы непосредственно после буквызаглавная буква, но я новичок в регулярных выражениях, так что это все, что у меня есть.

Как мне решить эту проблему?

Ответы [ 3 ]

6 голосов
/ 01 мая 2019

Этот RegEx может помочь вам создать правильное выражение, соответствующее всем вашим входам:

([A-Z]{1}[a-z-]{1,})([A-Z]{1}[a-z-]{1,})
  • Он имеет две группы захвата, одна для первой и другая для последнейимена.
  • Он не соответствует латинским символам, при желании вы можете изменить a-z на \w.
  • Вы можете просто создать замену строки, чтобы заменить $1$2 на $1, $2.
  • Вы также можете добавить дополнительные границы к выражению, если это необходимо.

Это означает, что

  • Одна заглавная буква, за которой следуют одна или несколько строчных букв и тире для имен, и то же самое для фамилий, иВы можете просто изменить эти границы внутри двух групп, как вы хотите

enter image description here


Редактировать:

Основано на советах Pushpesh , можетзначительно упростить до это выражение :

([A-Z][a-z-]+)([A-Z][a-z-]+)

enter image description here

2 голосов
/ 02 мая 2019

Синтаксис в KNIME в узле String Manipulation должен быть следующим:

regexReplace($col1$,"([A-Z][a-z-]+)([A-Z][a-z-]+)" ,"$1, $2")

Сработало для меня с вашим примером.Regex может быть похожим, поскольку он работал со всеми 3 полученными / предложенными в повторах.

1 голос
/ 01 мая 2019

Необходимое регулярное выражение:

([a-z])([A-Z])

1-я группа захвата ([az]) Соответствует одному символу, присутствующему в списке ниже [az] az, одному символу в диапазоне между (индекс 97) и z (индекс 122) (с учетом регистра)

2-я группа захвата ([AZ]) Соответствует одному символу, присутствующему в списке ниже [AZ] AZ, одному символу в диапазоне между A (индекс 65)и Z (индекс 90) (с учетом регистра)

...