【问题标题】:Regex pattern for string having spaces only at end仅在末尾有空格的字符串的正则表达式模式
【发布时间】:2022-01-08 04:58:39
【问题描述】:

我有一个要求,我需要匹配满足以下所有要求的字符串 -

  1. 字符串长度必须为 12
  2. 字符串只能包含以下字符 - 字母、数字和空格
  3. 如果有空格,则必须在字符串的末尾。中间不允许有空格。

我尝试过使用下面的正则表达式 -

"^[0-9a-zA-Z\s]{12}$"

上面的正则表达式满足要求#1 和#2,但不能满足#3。 请帮助我达到要求。 提前致谢!!

【问题讨论】:

    标签: python python-3.x regex


    【解决方案1】:

    你可以使用

    ^(?=.{12}$)[0-9a-zA-Z]*\s*$
    

    如果必须至少存在一个字母:

    ^(?=.{12}$)[0-9a-zA-Z]+\s*$
    

    详情

    • ^ - 字符串开头
    • (?=.{12}$) - 字符串必须包含 12 个字符
    • [0-9a-zA-Z]* - 零个或多个字母数字
    • \s* - 零个或多个空格
    • $ - 字符串结束。

    请参阅regex demo

    【讨论】:

    • 这正在匹配中,是否有支持搜索的解决方案?
    • @mozway 此评论与当前要求无关。 OP 问题是关于验证,而不是从较长的文本中提取。
    • 这是我的问题,我很好奇你是否有答案;)
    • @mozway 那么请继续发帖。我不知道你的确切要求。
    • 谢谢..它解决了我的问题。但是你能解释一下 (?=.{12}$) 这是如何工作的吗?
    【解决方案2】:

    使用non-word boundary\B

    ^(?:[a-zA-Z0-9]|\s\B){12}$
    

    demo

    有了它,空格后面不能跟字母或数字,只能跟非单词字符(这里是空格)或字符串的结尾。

    确保至少有一个字符不为空:

    ^[a-zA-Z0-9](?:[a-zA-Z0-9]|\s\B){11}$
    

    请注意,对于 PCRE,您必须使用 D (DOLLAR END ONLY) 修饰符来确保 $ 匹配字符串的结尾而不是最后一个换行序列之前。或者更好地将$ 替换为\z。 Python 和 re 模块不存在这种问题。

    【讨论】:

      【解决方案3】:

      你可以使用这个正则表达式:

      ^(?!.*\h\S)[\da-zA-Z\h]{12}$
      

      RegEx Demo

      正则表达式详细信息:

      • ^:开始
      • (?!.*\h\S):如果空格后跟非空格字符,则负前瞻会导致匹配失败
      • [\da-zA-Z\h]{12}:匹配12个字母数字或空格字符
      • $:结束

      【讨论】:

        猜你喜欢
        • 2010-11-23
        • 1970-01-01
        • 2013-10-30
        • 2016-04-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多