Regex 在记事本+中使用正则表达式替换更改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;;

我正在尝试使用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;;
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等)并在那里执行必要的操作。