仅在末尾有空格的字符串的正则表达式模式

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个字母数字或空格字符 $:结束

【讨论】:

以上是关于仅在末尾有空格的字符串的正则表达式模式的主要内容,如果未能解决你的问题,请参考以下文章

Python正则表达式初识

允许单词之间有空格的正则表达式

Java正则表达式防注入小例子

正则表达式模式单个和多个相同字符的实例

Python re正则表达式速查

JS的正则表达式