MultiReplace Plugin
The MultiReplace Plugin is another plugin that will allow replacements to use mathematical forumula.
Starting in Notepad++ v8.5.8, you can install the plugin through Plugins Admin. For older versions of Notepad++, you may be able to install it manually.
As explained in this post, this is in a nutshell how MultiReplace is working for Math.
Activating ‘Use Variables’:
This option facilitates math functions and dynamic string substitutions within a Replace String. It can work with all search settings combined and is not exclusively dependent on regex.
Commands Overview:
Either set or cond command is mandatory to set in ‘Replace with’ to wrap the math functions.
set(strOrCalc) - simple push of math results to Replace
cond(condition, trueVal, [falseVal]) - if-then or if-then-else condition for push of results
Examples of Commands Usage:
set("replaceString"..CNT) - results in “replaceString3” (assuming CNT = 3).
set(LINE+5) - results in “10” (assuming LINE = 5).
cond(LINE<=5 or LINE>=9, "edge", "center") - results in “edge” (assuming LINE = 5).
cond(LINE<3, "Modify this line") - Keeps original text if condition is false (assuming LINE >= 3).
Variables Overview:
(will be enhanced in future by User requests):
CNT: Count of the detected string.
LINE: Line number where the string is found.
APOS: Absolute character position in the document.
LPOS: Relative line position.
LCNT: Count of the detected string within the line.
COL: Column number where the string was found (CSV-Scope option selected).
MATCH: Contains the text of the detected string.
Special Variables:
CAP1, CAP2, …: Correspond to regex capture groups $1, $2. CAP variables are usable for calculations or as strings.
Format Handling: If the CAP variable is a number it can interpret both dot and comma as decimal separators, making international usage more straightforward. Thousand separators are not supported.
Note: $1 and $2 can be used in ReplaceString but content will only be resolved in CAP Variables for conditions and math functions
Example of special Variables:
Find: (\d+.\d+)
Replace with: set(CAP1 * 1.2) - multiplies decimal number with 1.2
Basic rules:
Strings have to be quoted by ' or "
Concatenation is by ..
Arithmetic: +, -, *, /, ^, %
Relational: ==, ~=, <, >, <=, >=
Logical: and, or, not
Example of combining:
Find: Price: (\d+(\.\d+)?)
Replace with: cond(CAP1~=0, "Price per unit: " ..(CAP1/10), "Price cannot be zero") - Calculates Price per Unit if not Zero.
Further functionality:
As the engine is LUA driven all LUA math and string functions can be used in set or either cond
Example with advanced math Function:
Find: Radius: (\d+)
Replace with: set("Circumference: "..(2 * math.pi * CAP1)) - Calculates the circumference of a circle given its radius.
Example with a string function for alignment:
Find: ;
Replace with: cond(LCNT == 1, string.rep(" ", 20 - (LPOS))..";") - aligns first occurrence of semicolon in Line to the 20th character position.