Regex 在记事本+中使用正则表达式替换更改csv文件条目的顺序+;
我正在尝试使用Notepad++内置的查找/替换功能更改*.csv文件项的顺序。这是文件现在的样子:Regex 在记事本+中使用正则表达式替换更改csv文件条目的顺序+;,regex,csv,notepad++,Regex,Csv,Notepad++,我正在尝试使用Notepad++内置的查找/替换功能更改*.csv文件项的顺序。这是文件现在的样子: ABC;DEF;Here comes some long text with ,.- in it;true;false; QWE;RTY;Here comes some long text with ,.- in it;true;false; 这就是查找/替换后的外观: DEF;Here comes some long text with ,.- in it;ABC;true;false;;
ABC;DEF;Here comes some long text with ,.- in it;true;false;
QWE;RTY;Here comes some long text with ,.- in it;true;false;
这就是查找/替换后的外观:
DEF;Here comes some long text with ,.- in it;ABC;true;false;;
RTY;Here comes some long text with ,.- in it;QWE;true;false;;
所以列#1应该在#3的位置,列号#2和#3应该向左移动一个
到目前为止,我尝试的是:
我尝试在find字段中使用正则表达式获取前三列,在它们周围放上一些括号,并在replace字段中使用$符号对它们重新排序但我的正则表达式几乎与整行匹配,而不仅仅是前三列-我做错了什么?这是我的正则表达式:
([A-Z]{3})\;([A-Z]{3})\;(.*[^\;])\;
前两列和以下如果代码>选择正确,则问题必须在第三轮括号中。但我不知道问题出在哪里。第三个表达式应与除之外的所有表达式匹配代码>并以结尾代码>
替换字段的内容应为$2$3;$1;代码>,我想这是对的。主要问题是你不必要地逃出分号。使用此表达式^(?s)([A-Z]{3};)([A-Z]{3};)([^\n\r;]*;)
并将其替换为此表达式$2$3$1
在列数较少的行中也包含行分隔符\r
或\n
。此外,如果您有更多列,您应该使用字符串起始锚定^
,以确保安全 你不需要逃离分号。如果你不逃避他们,你的表情就会起作用。此外,如果您有更多的列,您应该使用字符串起始锚点以确保安全<代码>^([A-Z]{3});([A-Z]{3});([^;]*);代码>您最好使用Excel©或libreOffice您最好只使用带有csv解析器的脚本语言(Perl、Python、Ruby等)并在那里执行必要的操作。