Проверить одну точку и пробел в регулярном выражении - PullRequest
2 голосов
/ 16 марта 2019

Я пытаюсь подтвердить имя ниже условий

  1. Первый и последний символ должны быть буквенными и без пробелов в начале и в конце.
  2. Если есть какая-либо точка, то должна бытьпространство.Имя может содержать не более 1 точки и 1 пробела.
  3. Длина слова должна быть 5,20.

Работа с кодом:

    def check(word):
        matchObj = re.match( r'^(([^ ]?)(^[a-zA-Z]).*([a-zA-Z]$)([^ ]?))$', word, re.M|re.I)
        if matchObj:
            return True
        else:
            return False

Я могу выполнить 1-е очко, но не могу понять, как выполнить 2-е очко.И для третьего пункта я пытался {5,20} до последнего $ регулярного выражения, но он не работает.

Из приведенного выше регулярного выражения я хочу проверить - Джексон - доктор Джексон

илишить законной силы нижеследующее: - Доктор Джексон # два пробела после точки (.) - Доктор. Джексон # содержит две точки

Надеюсь, что выше вы получили мою проблему.

1 Ответ

5 голосов
/ 16 марта 2019

Вы можете использовать это регулярное выражение с предварительными утверждениями:

(?mi)^[a-z](?!(?:.*\.){2})(?!(?:.* ){2})(?!.*\.[a-z])[a-z. ]{3,18}[a-z]$

RegEx Demo

Информация о регулярных платежах:

  • (?mi): включить режимы MULTILINE и IGNORE_CASE
  • ^: старт
  • [a-z]: сопоставить букву в начале
  • (?!(?:.*\.){2}): отрицательный взгляд, утверждающий, что у нас не более одной точки
  • (?!(?:.* ){2}): отрицательный взгляд, утверждающий, что у нас не более одного пробела
  • (?!.*\.[a-z]): отрицательный взгляд, утверждающий, что если у нас есть точка, то за ней не следует буква
  • [a-z. ]{3,18}: сопоставьте от 3 до 18 заданных символов с , чтобы получить общую длину от 5 до 20
  • [a-z]: сопоставить букву до конца
  • $: конец
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...