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

时间:2016-05-12 20:29:27

标签: regex flat-file

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

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

我对RegEx没有很好的把握,因为我最终不经常使用它,但我大部分都在那里:

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

这会跳过连续的前1018列,如果其中没有数字,则选择接下来的8个字符。这会抓住我给出的第一个“无效”示例,但不是第二个。我需要一个能同时做到这两点的人。

1 个答案:

答案 0 :(得分:0)

看起来你需要

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

替换为$1(或\1取决于您的正则表达式风格)。

查看简化的demo

模式详情

  • ^ - 开始行/字符串
  • (.{1018}) - 第1组匹配新行以外的1018个字符
  • (?!\d{8}) - 如果以下8个字符为数字
  • ,则表示匹配失败
  • .{8} - 匹配,使用,不是所有数字的8个字符。