用正则表达式替换列表中的第 n 个元素

用正则表达式替换列表中的第 n 个元素

我有一个文件,其中包含用分号分隔的字符串列表,如下所示:

aaaa;bbb;ccccccc;dd;  
eeee;fff;ggggggg;hh;  
iiii;jjj;kkkkkkk;ll;

并正在寻找一个正则表达式来替换每行的第 n 个元素(使用 Notepad++ v6.8.3,正则表达式引擎主要遵循 Perl 语法)。我相信这个表达式

^([^\;]*\;){n}([^;]*)

其中 n 为数字,将捕获直到第 n 个分号的所有内容。我需要用什么来替换它才能仅更改每行的第 n 个条目?

举个例子:如果 n=3,我想要一个正则表达式和替换来获得

aaaa;bbb;xxxxxxx;dd;  
eeee;fff;xxxxxxx;hh;  
iiii;jjj;xxxxxxx;ll;

答案1

搜索:

^((?:[^;]*;){2})([^;]*;)([^;]*)

代替:

\1xxxxxx;\3

我的改变:

  • 使用量词非捕获 ( ?:) 创建组,并在其周围添加捕获组,以一次性捕获所有内容
  • 更改nn-1并复制内部组以单独([^;]*;)捕获第 n 个
  • 删除了一些多余的转义

相关内容