用于选择不全是数字的代码块的正则表达式

Regular Expression for selecting a block of code that isn't all numbers

我正在尝试清理 C-ISAM 数据库中包含损坏数据的平面文件。平面文件是固定位置分隔的,我要清理的字段是日期字段。该字段使用八位数字格式 (YYYYMMDD)。我想要做的是使用具有正则表达式功能的文本编辑器来查找此列不包含八位数字的任何行,并将其替换为空值。

因为本来应该存在的真实数据是不可恢复的,并且因为转换脚本丢弃了无效日期,所以日期不需要有效,只需要格式。换句话说,20160512 和 99999999 是有效值,但所有空格都不是,“ 123 ”也不是。

我不太了解 RegEx,因为我最终很少使用它,但我大部分时间都在使用它:

(?<=^.{1018})[^\d]{8}

这将跳过一行中的前 1018 列并选择接下来的 8 个字符(如果其中没有数字)。这捕获了我给出的第一个 'not valid' 示例,但没有捕获第二个。我需要一个兼具两者的功能。

看来你需要

^(.{1018})(?!\d{8}).{8}

替换为 </code>(或 <code>,具体取决于您的正则表达式风格)。

查看简化版 demo

图案详情:

  • ^ - line/string
  • 的开始
  • (.{1018}) - 第 1 组匹配除换行符以外的 1018 个字符
  • (?!\d{8}) - 如果以下 8 个字符是数字
  • ,则否定前瞻会导致匹配失败
  • .{8} - 匹配,消耗,8个不全是数字的字符。