正则表达式,其匹配具有可变长度元素的固定长度块

时间:2012-01-24 17:56:18

标签: regex lookahead

我正在编写一些正则表达式来匹配包含用空格填充的数字元素的行,例如-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)$/

混合使用其他只有一个或两个数字组的行,带有表示垃圾的行,以及带有其他(可能是不可知的)内容的行,所以我希望在我匹配的内容中非常精确。

1 个答案:

答案 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}部分之后结束。

相关问题