正则表达式:搜索/替换

时间:2014-07-21 05:05:34

标签: regex

我有一个包含8.500行的SQL文件。我需要搜索/替换行的开头并替换前四个字段:

"(239, 100, NULL, NULL, " to "(239$100$NULL$NULL$"

不幸的是,有些行不使用“NULL”:

"(179, 99, 0, '', "

我从不使用字段3和4.我不知道为什么空值的写法不同,但我想有三种变体:NULL,0和''。

目的是在Excel中使用$作为分隔符。

3 个答案:

答案 0 :(得分:4)

我假设您将在文本文件中进行替换。你可以这样做:

搜索:^\((\d+),\s*(\d+)(?:[^,]*,){3}

替换:($1$$2$NULL$NULL$

the online demo中,请参阅底部的替换。

<强>解释

  • ^锚点断言我们位于字符串的开头
  • \(匹配左括号
  • (\d+)捕获分组
  • 的第一个数字
  • ,匹配第一个逗号
  • \s*匹配可选的空格
  • (\d+)将第二组数字捕获到第2组
  • (?:[^,]*,){3}吃下第三个下一个逗号的任何内容
  • 我们替换为第1组,$,第2组,$NULL$NULL$

答案 1 :(得分:1)

以下正则表达式将匹配所有可能的组合:

^"\((\d+),\s*(\d+),\s*(NULL|\d+|''),\s+(NULL|\d+|''), "
     ---      ---      -----------      -----------
    Number   Number  NULL or 0 or ''  NULL or 0 or ''

答案 2 :(得分:0)

Sublime Text可以为您完成而无需编写任何代码。只需将SQL粘贴到其中,按Ctrl-H,选中Regular Expresstion,然后替换

^\((\d+),\s*(\d+),[^,]+,[^,]+,

($1$$$2$$NULL$$NULL,

您也可以在我撰写的http://jsfiddle.net/JohnnyWorker/u6xMc/light/上对其进行测试(记得查看全局和多线),但我不建议您在此处粘贴8.500行。这个jsFiddle仅用于测试你的模式。