Регулярное решение для шаблона {First_name и First_name Last_name}: - PullRequest
0 голосов
/ 24 сентября 2019

Это следующее, я полагаю, применяет регулярное выражение, как используется в Python.Если есть другой способ сделать это вне регулярного выражения, я открыт для этого.

Мне нужно преобразовать строку этого формата:

'{First_name1} and {First_name2 Last_name}'

    (i.e. John and Mary Jones)

в:

'{First_name1 Last_name2}, {First_name2 Last_name2} 

    (i.e. John Jones, Mary Jones)

Будучи новичком в регулярных выражениях, это один шаблон, который озадачил меня.Я предполагаю, что мне придется найти экземпляры всего сегмента, захватить фамилию и использовать .sub (), чтобы добавить копию в нужное место?

РЕДАКТИРОВАТЬ: Хотярешения, представленные до сих пор, отвечают на этот вопрос, я подумал, что упомянул, что нашел еще одну ситуацию, которая до сих пор попадалась на решения.Это следующее:

{First_name1 Last_name1, and First_name2, Last_name2}

Извиняюсь за то, что не видел (и, следовательно, написал в моем исходном вопросе) этот образец раньше.

Пока что я изменил один из ответов, чтобы получить это далеко:

([^,]+)(?!\W,)( and [^ ]+ )([^ ]+)

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

Ответы [ 2 ]

2 голосов
/ 24 сентября 2019

Если ваши данные всегда в этом формате, то нет необходимости, чтобы я мог видеть регулярное выражение, вы можете просто разбить строку и использовать индексирование для построения желаемых имен в требуемом формате:

a = 'John and Mary Jones'
a_split = a.split()
[(a_split[0], a_split[-1]), (a_split[-2], a_split[-1])]

результаты в

[('John', 'Jones'), ('Mary', 'Jones')]
1 голос
/ 24 сентября 2019

Что касается вашего точного примера ввода, то вы можете использовать:

([^ ]+)( and [^ ]+ )([^ ]+)

https://regex101.com/r/HkMiWi/1

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