【发布时间】:2019-09-28 23:46:35
【问题描述】:
我正在尝试在更大的正则表达式和固定列文本块中验证格式。我想匹配一个固定宽度的模式,但前提是它左边只有数字,右边只有空格(或没有)。生成的表达式将在 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 个字符。
【问题讨论】:
-
匹配0+个空格字符后右边有边界吗?例如,在 17 位数字或空格之后是否有规则?后面只能有非数字或空格吗?示例数据中 A 和 B 的含义是什么?列长是 18 吗?
标签: python regex fixed-width