仅在末尾有空格的字符串的正则表达式模式
Posted
技术标签:
【中文标题】仅在末尾有空格的字符串的正则表达式模式【英文标题】:Regex pattern for string having spaces only at end 【发布时间】:2022-01-08 04:58:39 【问题描述】:我有一个要求,我需要匹配满足以下所有要求的字符串 -
-
字符串长度必须为 12
字符串只能包含以下字符 - 字母、数字和空格
如果有空格,则必须在字符串的末尾。中间不允许有空格。
我尝试过使用下面的正则表达式 -
"^[0-9a-zA-Z\s]12$"
上面的正则表达式满足要求#1 和#2,但不能满足#3。 请帮助我达到要求。 提前致谢!!
【问题讨论】:
【参考方案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个字母数字或空格字符
$
:结束
【讨论】:
以上是关于仅在末尾有空格的字符串的正则表达式模式的主要内容,如果未能解决你的问题,请参考以下文章