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

2024-05-23 18:53:50 发布

您现在位置:Python中文网/ 问答频道 /正文

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

  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

我能做第一点,但无法理解如何做第二点。对于第三点,我在regex的最后一个$之前尝试了{5,20},但它不起作用。你知道吗

我想从上面的正则表达式中验证 -杰克逊 -杰克逊医生

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

希望你能解决我的问题。你知道吗


Tags: 代码re名称returndef字母条件字符
0条回答
网友
1楼 · 发布于 2024-05-23 18:53:50

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

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

RegEx Demo

正则表达式详细信息:

  • (?mi):启用多行和忽略大小写模式
  • ^:开始
  • [a-z]:在开头匹配一个字母
  • (?!(?:.*\.){2}):否定的前瞻性断言我们没有超过一个点
  • (?!(?:.* ){2}):否定的前瞻性断言我们没有超过一个空间
  • (?!.*\.[a-z]):否定前瞻断言如果我们有一个点,那么它后面就没有一个字母
  • [a-z. ]{3,18}:将给定字符中的3到18个匹配到使总长度为5到20
  • [a-z]:在结尾前匹配一个字母
  • $:结束

相关问题 更多 >