我必须在第一个空格(如果有的话)之前验证字符串是否符合以下格式:
举例说明,以下内容有效:
1234
Abc123456DeF
1234 blah+
XyZ01234
我无法避免这种情况:123a+b blah
到目前为止,我有(^\w{0,3}\d{4}\w{0,3})\s*
,但问题在于确保第一部分没有捕获到非字母。
我可以看到几个解决方案:
运行正则表达式两次,首先将字符串添加到第一个空格([^\s]+)
,然后再次应用正则表达式,确保它最多以3个字母(^\w{0,3}\d{4}\w{0,3}$)
结尾。这就是我现在所做的,但肯定有一种方法可以在一个表达式中做到这一点 - 我无法弄清楚如何
确保(潜在)3个尾随字母和(潜在)空格之间不存在非字母。 (^\w{0,3}\d{4}\w{0,3}no non-letters)\s*
我尝试过负面预测(?!.*)
,但这似乎没有做任何事情。
答案 0 :(得分:1)
此正则表达式符合您的规格。
正则表达式: ^\w{0,3}\d{4,}\w{0,3}\s?$
<强>说明:强> 根据您的规格。
\w{0,3}?
最多3个主要字母
\d{4,}
至少4个连续数字
\w{0,3}?
最多3个尾随字母
我必须在第一个空格(如果有的话)之前验证字符串是否符合以下格式:
\s?
因此是一个可选空格.
注意: - 我保持这一点,因为评论中指出了许多缺点。所以要保持评论的背景。
<强>解决方案:强>
就像我在comment中所说的那样。
@JCK:问题是。 。即使是空白也是可选的。因此难以区分第一和第二部分。
现在采用先行解决了这个问题。完整的正则表达式是这样的。
正则表达式: ^(?=.*[0-9]{4,}[A-Za-z]{0,3}(?:\s|$))[A-Za-z]{0,3}[0-9]{4,}[A-Za-z]{0,3}\s*?(?:\S*\s*)*$
说明:
(?=.*[0-9]{4,}[A-Za-z]{0,3}(?:\s|$))
这个积极的前瞻确保您的规范定义的第一部分是匹配的。它查找提到的规范以及\s
或$
,即字符串的结尾。因此匹配第一部分。
[A-Za-z]{0,3}[0-9]{4,}[A-Za-z]{0,3}\s*?(?:\S*\s*)*
其余的正则表达式符合规范。
答案 1 :(得分:0)
正则表达式: (^[A-Za-z]{0,3}\d{4,}[A-Za-z]{0,3})(?:$|\s+)
\w
与[A-Za-z0-9_]
相同,因此要匹配字母,请使用[A-Za-z]
。
(?:$|\s+)
匹配字符串的结尾或至少一个空格(因此忽略字符串的其余部分)。