Как сопоставить имя с возможным специальным символом с помощью регулярного выражения и Python? - PullRequest
1 голос
/ 19 июня 2020

Я пытаюсь сопоставить имена вроде John Williams и Kevin O'McDonald-Smith, но не Kevin O''McDonald, Kevin O'McDonald-Smith-Williams или Kevin Smith John Smith. Мой запрошенный код ниже:

r1 = re.findall(r"(([A-z]+')?[A-z]+)([,]?[\s-](([A-z]+')?[A-z]+)){0,2}", "Kevin O'McDonald-Smith")
print(r1)

Это выводит:

[('Kevin', '', '-Smith', 'Smith', "O'")]

Я ожидаю:

[("Kevin O'McDonald-Smith")]

Я тестировал этот случай регулярного выражения на https://regexr.com/, но мой код, использующий библиотеку Python re, дает результат, которого я не ожидал.

1 Ответ

2 голосов
/ 19 июня 2020

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

Отрицательный просмотр вперед (?!.*[\'-].*[\'-]) утверждает, что два (или более) специальных символа не появляются в имени. Один специальный символ все равно будет разрешен, как и любой другой символ, включая пробел.

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