组内的正则表达式

时间:2014-04-10 11:26:47

标签: regex notepad++

我有一个csv文件,我需要导入我的数据库。

示例输入:

  

122545; bmwx3;新;红,黑,白,粉红

我希望最终输出如下:

INSERT INTO myTable VALUES ("122545", "bmwx3", "new", "red");
INSERT INTO myTable VALUES ("122545", "bmwx3", "new", "black");
INSERT INTO myTable VALUES ("122545", "bmwx3", "new", "white");
INSERT INTO myTable VALUES ("122545", "bmwx3", "new", "pink");

第4个元素是" sub-csv"包含未知数量的条目。但总是采用那种格式(没有")

理想情况下,我想在记事本++中使用正则表达式执行此操作,如果不可能,我将不得不编写脚本。

我认为首先我要做到这一点:

  

122545; bmwx3;新;红,黑,白,粉红

看起来像这样:

  

122545; bmwx3;新;红色

     

122545; bmwx3;新;黑

     

122545; bmwx3;新;白

     

122545; bmwx3;新;粉色

我的问题是我不知道匹配 sub -csv。甚至可以在 pure 正则表达式中执行此操作(无需编程)?

2 个答案:

答案 0 :(得分:1)

当然不是最简单的方法,但它有效:

找到:^([^,]+;)(.+),([^,]+)$
替换为:$1$2\n$1$3

然后根据需要多次点击Replace all

答案 1 :(得分:1)

如果122545;bmwx3;new;部分已修复

分三步:

  • 前往red,black,white,pink#LIMIT#122545;bmwx3;new;:将(.*;)([^;]*)替换为\2#LIMIT#\1

  • 创建122545;bmwx3;new;red叮咬:替换

    (\w+)(?:,|(?=#LIMIT#))(?=.*#LIMIT#(.*))
    

    \2\1\n(请参阅demo

  • 删除#LIMIT#...行:用空字符串替换^#LIMIT#.*


如果122545;bmwx3;new;部分已修复

@ hjpotter的想法看起来很酷,你只需要用

替换,
\n122545;bmwx3;new;

还剩下什么

替换

^(\w*);(\w*);(\w*);(\w*)$

INSERT INTO myTable VALUES ("\1", "\2", "\3", "\4")

你很高兴去!