匹配固定长度块和可变长度元素的正则表达式

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)$/

混杂在其中的还有其他只有一个或两个数字组的行,带有展示垃圾的行,以及其他可能无法确定内容的行,因此我希望在匹配时非常精确。


也许最好让正则表达式发挥作用,然后您可以只使用 right()substring() 函数将结果截取为仅 7 个字符。 - ean5533
最简单的方法可能是在您原始的正则表达式下匹配,然后测试匹配的strlen是否最多为七。 - user554546
你能否发布一些示例行并指出哪些部分需要匹配,哪些不需要匹配? - Tim Pietzcker
1个回答

4
你可以使用向前界定符(不需要括号):
/(?=[\s\d-]{4}\.\d{2})\s*-?\d+\.\d{2}/

根据这些元素的分隔符,您可能需要在正则表达式周围添加一些锚点,以确保您不匹配超出七个字符的内容。

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接