正则表达式:连续编号替换

时间:2014-03-21 18:26:49

标签: regex replace numbers notepad++

我有一个重复“文章”这个词的文字,我需要使用Notepad ++用一个数字替换每个单词,从'1'开始,然后是下一个实例'2'..等等{\ d + [+ 1]}

例如:

this is article and this is another article.  Here is an article etc.

变为:

this is 1 and this is another 2.  Here is an 3 etc.

1 个答案:

答案 0 :(得分:1)

是的,你可以,但这很棘手。 假设您的文件中没有#,请将每一行替换为下一行(全部替换多次):

(?<!#)(#*article)([^#]*?)((?=\1))
\1\2#\3

所以这给出了this is article and this is another #article. Here is an ##article etc.。继续:

article
\#

所以你有: this is # and this is another ##. Here is an ### etc.

现在每篇文章都被映射到其位置磅数的n倍。要转换为基数10,您需要交替并重复执行以下操作(假设%未出现在原始文本中)

#{10}
%

%{10}
#

依此类推,直到你无法取代第一个和第二个。然后你可以这样做:

(#|%)\1{8}
9

(#|%)\1{7}
8

(#|%)\1{6}
7

(#|%)\1{5}
6

(#|%)\1{4}
5

(#|%)\1{3}
4

(#|%)\1{2}
3

(#|%)\1{1}
2

(#|%)
1

瞧! this is 1 and this is another 2. Here is an 3 etc.如果您的文档中有n篇文章,则第一次操作需要O(n)次才能单击“全部替换”,第二次操作需要O(log(n)),第三次O(1),所以总时间实际上是O(n),这是你所期望的。