验证正则表达式中的单点和空格

时间:2019-03-16 07:33:56

标签: python regex python-3.x

我正在尝试在以下条件下验证姓名

  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

我能够做到第一点,但无法理解如何做到第二点。关于第三点,我在正则表达式的最后一个{5,20}之前尝试了$,但是它不起作用。

我要验证上述正则表达式 -杰克逊 -杰克逊博士

并使以下内容无效: -杰克逊博士#点后两个空格(。) -杰克逊博士#包含两个点

希望上面有我的问题。

1 个答案:

答案 0 :(得分:5)

您可以将此正则表达式与前瞻性断言一起使用:

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

RegEx Demo

RegEx详细信息:

  • (?mi):启用MULTILINE和IGNORE_CASE模式
  • ^:开始
  • [a-z]:在开头匹配一个字母
  • (?!(?:.*\.){2}):否定前瞻,断言我们没有多个点。
  • (?!(?:.* ){2}):否定前瞻,断言我们没有多个空格
  • (?!.*\.[a-z]):否定前瞻,断言如果我们有一个点,则该点后面不带字母
  • [a-z. ]{3,18}:匹配3到18个给定字符,以使总长度为5到20
  • [a-z]:在结尾处匹配一个字母
  • $:结束