Notepad ++正则表达式累加数字

时间:2013-12-10 22:47:53

标签: regex math notepad++

如何为所有这些数字求和或添加某个值?例如,我的目标是用“100”增加“”中的所有数字,但实现这一点一直存在问题。基本上只是以+100的形式将当前数字相加。

我有以下几行

<devio1="875" devio2="7779" devio3="5635" devio4="154"/>
<devio1="765" devio2="74779" devio3="31535" devio4="544"/>
<devio1="4335" devio2="13" devio3="55635" devio4="1565"/>

在Notepad ++中使用这个正则表达式

<devio1="([0-9]+)" devio2="([0-9]+)" devio3="([0-9]+)" devio4="([0-9]+)"/>

我可以在“”中找到所有数字,但我找不到向所有数字添加+100的方法。可以使用正则表达式使用Notepad ++实现此任务吗?

3 个答案:

答案 0 :(得分:9)

仅在Notepad ++中使用正则表达式是不可能的。遗憾的是,无法在替换模式中执行计算。

因此,在Notepad ++中完成任务的唯一方法是使用Python Script插件。

  1. Python Scriptofficial website安装Plugin Manager插件。
  2. 然后转到Plugins&gt; Python Script&gt; New Script。选择新文件的文件名(例如add_numbers.py)并复制以下代码:

    def calculate(match):
        return 'devio%s="%s"' % (match.group(1), str(int(match.group(2))+100))
    
    editor.rereplace('devio([0-9])="([0-9]+)"', calculate)
    
  3. 运行Plugins&gt; Python Script&gt; Scripts&gt; add_numbers.py您的文字将转换为:

    <devio1="975" devio2="7879" devio3="5735" devio4="254"/>
    <devio1="865" devio2="74879" devio3="31635" devio4="644"/>
    <devio1="4435" devio2="113" devio3="55735" devio4="1665"/>
    

答案 1 :(得分:2)

我对notepad ++并不熟悉,但对于算法,假设你有一个数字abcd = a * 1000 + b * 100 + c * 10 + d,那么只要b在[0,8]你可以用b + 1代替b。至于b = 9时你需要用0替换b并用a + 1替换a(如果a = 9那么你用a替换10)。

注意到这一点,您可以使用三位和四位数字,例如,应用以下正则表达式:

\([1-9]+\)0\([0-9]{2}\) -> \1 1\2, 
\([1-9]+\)1\([0,9]{2}\) -> \1 2\2, 
... -> , 
\([1-9]+\)8\([0-9]{2}\) -> \1 9\2, 

依此类推......注意你还必须考虑任何a = 9,b = 9整数和更大的整数;这表明使用if语句覆盖10 ^ x(x> = 2)的系数等于9的情况的某种迭代。当你开始实际编码(或手工完成)时,你将开始意识到这样做采用纯正的正则表达式方法会很痛苦。

答案 2 :(得分:0)

正则表达式不支持算术,而且Notepad ++不支持除正则表达式之外的任何计算,所以如果你限制自己使用该工具,那么你就会陷入困境。当然,还有许多其他非Notepad ++解决方案,其中一些在Math operations in regex中讨论过。