4

我正在编写一些正则表达式来匹配包含用空格填充的数字元素的行,例如-2.45. 正则表达式很简单:

/(\s*-?\d+\.\d{2})/

但是,我有一个额外的限制,即整个块仅限于七个字符。我可以修改表达式以将前导空格和数字限制在其理论最大值内:

/(\s{0,3}-?\d{1,4}\.\d{2})/

但这不是解决方案,因为\s{0,3}匹配独立于\d{1,4},所以整个事情可以匹配一个从四到十一个字符的块。

有什么办法可以将这样的整个组限制为固定长度?

编辑:

为了澄清,我正在处理这七个字符组中的三个用三个空格分隔的行,因此较大的正则表达式遵循以下行:

/^(fixed length stuff at start of line)(7 char chunk)\s{3}(2nd 7 char chunk)\s{3}(3rd 7 char chunk)$/

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

4

1 回答 1

4

您可以使用前瞻断言(并且不需要括号):

/(?=[\s\d-]{4}\.\d{2})\s*-?\d+\.\d{2}/

您可能需要在正则表达式周围使用一些锚点,以确保您不匹配超过七个字符,具体取决于这些元素的界限,例如

/(?=[\s\d-]{4}\.\d{2}\b)\s*-?\d+\.\d{2}\b/

以确保该数字实际上在该\.d{2}部分之后结束。

于 2012-01-24T17:59:39.090 回答