我正在编写一些正则表达式来匹配包含用空格填充的数字元素的行,例如-2.45
。这方面的正则表达式很简单:
/(\s*-?\d+\.\d{2})/
但是,我还有一个额外的限制,即整个块只限于七个字符。我可以修改表达式,将前导空格和数字限制在理论最大值范围内:
/(\s{0,3}-?\d{1,4}\.\d{2})/
但这不是解决方案,因为\s{0,3}
与\d{1,4}
无关,因此整个事物可以匹配从4到11个字符的任何块。
有什么方法可以将这样的整个群体限制在一个固定的长度?
修改
为了澄清,我正在处理这七个字符组中有三个用三个空格分隔的行,所以较大的正则表达式沿着以下几行:
/^(fixed length stuff at start of line)(7 char chunk)\s{3}(2nd 7 char chunk)\s{3}(3rd 7 char chunk)$/
混合使用其他只有一个或两个数字组的行,带有表示垃圾的行,以及带有其他(可能是不可知的)内容的行,所以我希望在我匹配的内容中非常精确。
答案 0 :(得分:4)
您可以使用lookahead assertion(并且不需要括号):
/(?=[\s\d-]{4}\.\d{2})\s*-?\d+\.\d{2}/
您可能需要在正则表达式周围添加一些锚点,以确保您不会超出七个字符,具体取决于界定这些元素的内容,例如
/(?=[\s\d-]{4}\.\d{2}\b)\s*-?\d+\.\d{2}\b/
确保数字实际在\.d{2}
部分之后结束。