我正在尝试在较大的正则表达式和固定列文本块中验证格式。我想匹配一个固定宽度的模式,但前提是它的左边只有数字,右边只有空白(或没有空格)。结果表达式将在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个字符。
模式的部分问题是您正在使用[\d\s]{17}
。这将匹配由数字和空格的混合的17个字符组成的字符串。当您要确保数字和空格(如果有)都是连续的。
为了限制字符串的长度,您可以使用正的Lookahead来验证整个字符串是否正好是17个字符。然后,您可以匹配任意数量的数字(长度已受限制),然后匹配空格字符。
您可以使用以下模式:
^(?=.{17}$)\d+\s*?$
Demo。
对于,