用右填充的连续空白匹配固定宽度的数字

问题描述 投票:1回答:1

我正在尝试在较大的正则表达式和固定列文本块中验证格式。我想匹配一个固定宽度的模式,但前提是它的左边只有数字,右边只有空白(或没有空格)。结果表达式将在python中使用。

以下几行应与17位数字模式匹配(标题除外):

MATCH
  *****************
A 20081122122332444 B
A 20081122122332    B
A 200811221223      B
A 2008112212        B
A 20081122          B

但是以下内容不匹配

NO MATCH
  *****************
A 20081122112233 1  B
A 2008112211223 1   B
A 200811221     C   B
A 20081122 .        B

此正则表达式足够容易地匹配有效数据:(?=\d+\s*)[\d\s]{17}

这似乎也可以拾取损坏的字符:(?=\d+[\s]?[^\d])[\d\s]{17}

由于位置的变化,后面的负向查找将不起作用,我宁愿不重复该模式以使字符串长度的所有可能变体起作用。

[似乎在正则表达式中有一种优雅的方法-捕获连续的数字块,然后捕获连续的空格,总共17个字符。

python regex fixed-width
1个回答
0
投票

模式的部分问题是您正在使用[\d\s]{17}。这将匹配由数字和空格的混合的17个字符组成的字符串。当您要确保数字和空格(如果有)都是连续的。

为了限制字符串的长度,您可以使用正的Lookahead来验证整个字符串是否正好是17个字符。然后,您可以匹配任意数量的数字(长度已受限制),然后匹配空格字符。

您可以使用以下模式:

^(?=.{17}$)\d+\s*?$

Demo


0
投票

对于,

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.