Как получить имена, используя RegEx для данного шаблона? - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь получить образцы из текста, используя RegEx:

John Doe
JOHN DOE
Sam John Watson
Sam John Lilly Watson
SAM JOHN WATSON
SAM JOHN LILLY WATSON

Входные данные содержат только одну строку, и мне нужно найти выше шаблоны в этом.

Подробнее о шаблоне

  • Каждое слово начинается с заглавной буквы, за которой следует заглавная или строчная буква
  • Минимум 2 слова
  • Максимум 4 слова
  • Слова будут включать только символы AZ или az

То, что я пробовал:

import re
re.findall("[A-Z][A-Za-z]+ [A-Z][A-Za-z]+ [A-Za-z]* [A-Za-z]*", text)

Что будет правильно определять ввод, например:

Sam Peters John Doe
SAM WINCH DAN BROWN

но не удается ввести менее 4 слов.

1 Ответ

0 голосов
/ 27 декабря 2018

Ваш шаблон не работает, потому что даже с * с после двух последних наборов символов пробелы рядом с этими двумя последними наборами символов не необязательны.Так (например) наличие только 2 слов в строке будет соответствовать, только если за этими двумя словами будет следовать два пробела .

Я бы предложил начать с [A-Z][A-Za-z]+ дляпервое слово, затем повторите пробел, за которым следует слово до 3 раз:

^[A-Z][A-Za-z]+(?: [A-Z][A-Za-z]+){1,3}$

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

Если могут быть слова только с одним символом (например, «I» или «A "), затем повторите набор символов [A-Za-z] с * вместо +.

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