【发布时间】:2022-01-08 04:58:39
【问题描述】:
我有一个要求,我需要匹配满足以下所有要求的字符串 -
- 字符串长度必须为 12
- 字符串只能包含以下字符 - 字母、数字和空格
- 如果有空格,则必须在字符串的末尾。中间不允许有空格。
我尝试过使用下面的正则表达式 -
"^[0-9a-zA-Z\s]{12}$"
上面的正则表达式满足要求#1 和#2,但不能满足#3。 请帮助我达到要求。 提前致谢!!
【问题讨论】:
标签: python python-3.x regex
我有一个要求,我需要匹配满足以下所有要求的字符串 -
我尝试过使用下面的正则表达式 -
"^[0-9a-zA-Z\s]{12}$"
上面的正则表达式满足要求#1 和#2,但不能满足#3。 请帮助我达到要求。 提前致谢!!
【问题讨论】:
标签: python python-3.x regex
你可以使用
^(?=.{12}$)[0-9a-zA-Z]*\s*$
如果必须至少存在一个字母:
^(?=.{12}$)[0-9a-zA-Z]+\s*$
详情:
^ - 字符串开头(?=.{12}$) - 字符串必须包含 12 个字符[0-9a-zA-Z]* - 零个或多个字母数字\s* - 零个或多个空格$ - 字符串结束。请参阅regex demo。
【讨论】:
使用non-word boundary\B:
^(?:[a-zA-Z0-9]|\s\B){12}$
有了它,空格后面不能跟字母或数字,只能跟非单词字符(这里是空格)或字符串的结尾。
确保至少有一个字符不为空:
^[a-zA-Z0-9](?:[a-zA-Z0-9]|\s\B){11}$
请注意,对于 PCRE,您必须使用 D (DOLLAR END ONLY) 修饰符来确保 $ 匹配字符串的结尾而不是最后一个换行序列之前。或者更好地将$ 替换为\z。 Python 和 re 模块不存在这种问题。
【讨论】:
你可以使用这个正则表达式:
^(?!.*\h\S)[\da-zA-Z\h]{12}$
正则表达式详细信息:
^:开始(?!.*\h\S):如果空格后跟非空格字符,则负前瞻会导致匹配失败[\da-zA-Z\h]{12}:匹配12个字母数字或空格字符$:结束【讨论】: