регулярное выражение python с необязательными несколькими группами

Я пытаюсь сопоставить несколько шаблонов и не могу заставить их работать.

Шаблоны, которые я пытаюсь сопоставить, следующие:

David C. Drummond
Sundar Pichai
Julie Spellman Sweet

Мне нужно выражение регулярного выражения, которое соответствует всем 3 группам.

То, что я пробовал до сих пор: r"^(\w*)\W?(\w*|\w\.)\W?(\w*)" со многими вариациями для пробелов между словами (\s, \b) и с жадным и не жадным символом (?) после пробела.


person bjj    schedule 04.02.2017    source источник
comment
Ваш шаблон должен соответствовать всем этим. Фактически, ваш шаблон соответствует каждой строке, имеющей начало (то есть всем строкам), потому что все остальное в нем необязательно.   -  person melpomene    schedule 04.02.2017
comment
Тем не менее, это не соответствует всем этим.   -  person bjj    schedule 09.02.2017
comment
Опубликуйте минимальный воспроизводимый пример.   -  person melpomene    schedule 11.02.2017


Ответы (1)


Для строк, которые вы показали, вы можете использовать ^(\w+)\s+(?:(\w\.|\w+)\s+)?(\w+)$, чтобы сопоставить их и иметь имя, отчество и фамилию, содержащиеся в 3 разных группах, причем вторая является необязательной.

См. https://regex101.com/r/O8NniM/1.

person Sebastian Proske    schedule 04.02.2017
comment
Это работает, но, как сказала Мельпомена, мое регулярное выражение должно работать, но это не так. Не могли бы вы пояснить, почему ваш работает? - person bjj; 09.02.2017