Regex 正则表达式:字符串之间不匹配“无字符”
如果有空格,我必须在第一个空格之前验证字符串是否匹配以下格式: 最多3个前导字母 至少4个连续数字 最多3个尾随字母 举例来说,以下是有效的: 1234 Abc123456DeF 1234废话+ XyZ01234 但是,我很难避免这种情况:123a+b等等 到目前为止,我有^\w{0,3}\d{4}\w{0,3}\s*但是问题在于确保在第一节中没有捕获非字母 我可以看到一些解决方案: 运行regex两次,首先将字符串设置为第一个空格[^\s]+,然后再次将regex应用于该空格,确保它以3个字母^\w{0,3}\d{4}\w{0,3}$结尾。这就是我现在所做的,但肯定有一种方法可以用一个表达式来表达——我就是不知道怎么做 确保潜在的3个尾随字母和潜在的空白之间不存在非字母^\w{0,3}\d{4}\w{0,3}没有非字母\s* 我试过消极前瞻?!。*但这似乎没有任何作用 此正则表达式满足您的规范 正则表达式:^\w{0,3}\d{4,}\w{0,3}\s$ 说明: 根据您的规格 \w{0,3}?最多3个前导字母 \d{4,}至少4个连续数字 \w{0,3}?最多3个尾随字母 如果有空格,我必须在第一个空格之前验证字符串是否匹配以下格式: \s?因此有一个可选的空间 注意:-我保留这一点,因为在评论中指出了许多缺点。所以要保持评论的上下文 解决方案: 就像我在书中说的 @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或$i.e字符串的结尾。因此与第一部分相匹配 [A-Za-z]{0,3}[0-9]{4,}[A-Za-z]{0,3}\s*?:\s*\s**正则表达式的其余部分符合规范要求 正则表达式:^[A-Za-z]{0,3}\d{4,}[A-Za-z]{0,3}?:$|\s+ \w与[A-Za-z0-9_]相同,因此为了只匹配字母,应该使用[A-Za-z]Regex 正则表达式:字符串之间不匹配“无字符”,regex,Regex,如果有空格,我必须在第一个空格之前验证字符串是否匹配以下格式: 最多3个前导字母 至少4个连续数字 最多3个尾随字母 举例来说,以下是有效的: 1234 Abc123456DeF 1234废话+ XyZ01234 但是,我很难避免这种情况:123a+b等等 到目前为止,我有^\w{0,3}\d{4}\w{0,3}\s*但是问题在于确保在第一节中没有捕获非字母 我可以看到一些解决方案: 运行regex两次,首先将字符串设置为第一个空格[^\s]+,然后再次将regex应用于该空格,确保它以3个字母
?:$|\s+匹配字符串的结尾或至少一个空格,因此忽略字符串的其余部分。+是特殊符号。当你说字母时,它应该被计算在内吗?还不清楚到什么时候。至少应该是,或者最多是\w字符类中没有+。1234 blah+如何符合规范?@Rahul当我说字母时,我指的是字符a-z/a-z,所以不是+。到目前为止,最多是基本上相同的事情,我不理解那里的混乱\w没有+事实上,我之所以选择它是因为它与a-z/a-z包含相同的基数。非字母字符可以包含在第一个空格之后,因此我提到在第一个空格之前需要遵循格式whitespace@JCK:您提到了在找到空白之前要应用的三个规范。在1234 blah+中,这些规范是如何满足的?@JCK:好的,那么你的意思是在遇到第一个空格之后,可能会有任意数量的字符?是的,我的意思是:在第一个空格之后,任何东西都会出现,在那之前就是规范matter@JCK:最后一点。在第一个空格之后会有更多的空格吗?类似aaa1234sss dddd fff gggg的东西?它捕获了以下情况,但它不应该捕获:1234+,1234abcdefg。编辑是可以有1个以上的空白\w并不总是与[A-Za-z0-9_]相同,在Python 3和.NET中默认情况下它等于[\p{L}\p{N}{u]。我现在看到\w并不一定意味着只有[0-9a-Za-Z],所以我认为[A-Za-Z]正是我需要的。这似乎很好地解决了问题,让我感到困惑的是我的头围绕着?:$\s+部分。谢谢@JCK:我不明白它是如何解决的,当它明显失败时,您不需要一个加号后\s。它实际上几乎和我的正则表达式一样。