我正在尝试在以下条件下验证姓名
代码工作:
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}
之前尝试了$
,但是它不起作用。
我要验证上述正则表达式 -杰克逊 -杰克逊博士
并使以下内容无效: -杰克逊博士#点后两个空格(。) -杰克逊博士#包含两个点
希望上面有我的问题。
答案 0 :(得分:5)
您可以将此正则表达式与前瞻性断言一起使用:
(?mi)^[a-z](?!(?:.*\.){2})(?!(?:.* ){2})(?!.*\.[a-z])[a-z. ]{3,18}[a-z]$
RegEx详细信息:
(?mi)
:启用MULTILINE和IGNORE_CASE模式^
:开始[a-z]
:在开头匹配一个字母(?!(?:.*\.){2})
:否定前瞻,断言我们没有多个点。(?!(?:.* ){2})
:否定前瞻,断言我们没有多个空格(?!.*\.[a-z])
:否定前瞻,断言如果我们有一个点,则该点后面不带字母[a-z. ]{3,18}
:匹配3到18个给定字符,以使总长度为5到20 [a-z]
:在结尾处匹配一个字母$
:结束