我在 Notepad++ 中使用此代码和 Python Script 插件来匹配和递增数字 106 到 255,并用空格分隔:
import re
import random
def calculate(match):
return '%s' % (str(int(match.group(1)) + 4))
editor.rereplace('((?<= )1[0-1][6-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5](?= ))', calculate)
但是如果我想包含比 255 更高的数字怎么办?例如,我想最多包含 637 个而不是 255 个。我该怎么做?如果不是 RegEx,也许还有其他方法可以做到这一点?
首先,那些
(?<= )
和(?= )
前瞻应该在组外(numbers)
,而不是在组内。例如,现在,最初的“space before”(?<= )
运算符仅适用于 1[0-1][6-9] - 它不适用于所有其他以 | 分隔的选项!即使没有空格分隔,您的正则表达式实际上也匹配“abcdef200”。(而且它还匹配 100 中的值,而不是 106 中的值,因为“1[0-9][0-9]”部分。)
所以你应该使用:
中间的主要正则表达式很长,但实际上并不复杂——它只是一个 -
|
分隔的选项列表,枚举了数字的所有可能方式。例如,如果您想匹配数字 106 到 637,它们可以这样分组(最后一位、最后 2 位、所有 3 位,然后以相同的方式返回):
10[6-9]
1[1-9][0-9]
[2-5][0-9][0-9]
6[0-2][0-9]
63[0-7]
所以最终的正则表达式看起来像:
但是,您有Python。您不需要将所有逻辑都塞进正则表达式中——您可以先匹配所有数字,然后让 Python 回调决定替换每个结果:
匹配所有 3 位数字(作为一种轻微的
[0-9]{3}
预防措施),并用它们自己或增加的值替换它们。