如何在记事本++中向后编号

时间:2017-07-04 20:53:49

标签: regex notepad++

所以,我有很多像这样的数字

rocket123
firefly1000
attack577

是否有任何正则表达式可以使数字反转?

rocket321
firefly0001
attack775

2 个答案:

答案 0 :(得分:1)

通过一个小技巧这是可行的。

第1步。为尚未倒置的数字添加标记。

查找

\b(\w+?)(\d+)\b

替换:

$1§$2

您可以选择其他标记而不是§

第2步。使用以下设置替换所有足够的时间:

查找

\b(\w+)§(\d*)(\d)\b

替换:

$1$3§$2

第3步。删除所有标记。

查找

\b(\w+\d)§

替换:

$1

希望这有帮助。

答案 1 :(得分:0)

如果知道要反转的最大位数并且不是太大,则可以使用单个Notepad ++正则表达式搜索和替换。假设最大位数为12,则表达式为:

搜索:

(\d)(\d)(\d)?(\d)?(\d)?(\d)?(\d)?(\d)?(\d)?(\d)?(\d)?(\d)?

替换为:

(?{12}${12})(?{11}${11})(?{10}${10})(?9$9)(?8$8)(?7$7)(?6$6)(?5$5)(?4$4)(?3$3)$2$1

说明:

要反转的任何数字都必须至少包含两位数,因此搜索中的首个(\d)(\d)得到两位数,而替换中的最后$2$1则将其倒序。输出。 (前两位数字是简单的部分。)然后,搜索字符串将模式(\d)?重复所需的次数,以获得最大位数。这些与剩余的数字(如果有)匹配。每个(\d)?模式在替换字符串中都有一个对应的项目,它们的格式为(?N$N),其中每个N是捕获组的编号。单个数字捕获类似于数字4的(?4$4)。对于捕获10和以上的数字,将其括在花括号中,例如,数字(?{12}${12})用数字12包围。这些替换项测试捕获组是否捕获了任何东西,并且,如果确实存在,则插入该捕获的项目。另请参见this answer

变化

根据需要添加或删除其他搜索和替换项,以增加或减少最大位数。

如果数字位数可能比预期的大,则在搜索字符串中添加额外的(\d)?并在替换末尾添加(?{13}__Some suitable error message__)会在超长的数字组上输出错误消息。当然,13需要进行更改以匹配搜索和替换项的数量。

已通过Notepad ++ 7.5.6版进行测试。