Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Regex match and replace operators in math operation

Given an input string

12/3
12*3/12
(12*54)/(3/4)

I need to find and replace each operator with a string that contains the operator

some12text/some3text
some12text*some2text/some12text
(some12text*some54text)/(some3text/some4text)

practical application: From a backend (c#), i have the following string

34*157

which i need to translate to:

document.getElementById("34").value*document.getElementById("157").value

and returned to the screen which can be run in an eval() function.

So far I have

var pattern = @"\d+";
var input = "12/3;

Regex r = new Regex(pattern);
var matches = r.Matches(input);

foreach (Match match in matches)
{
 // im at a loss what to match and replace here
}

Caution: i cannot do a blanket input.Replace() in the foreach loop, as it may incorrectly replace (12/123) - it should only match the first 12 to replace

Caution2: I can use string.Remove and string.Insert, but that mutates the string after the first match, so it throws off the calculation of the next match

Any pointers appreciated

like image 647
Ash M Avatar asked Oct 30 '22 08:10

Ash M


1 Answers

Here you go

string pattern = @"\d+"; //machtes 1-n consecutive digits
var input = "(12*54)/(3/4)";
string result = Regex.Replace(input, pattern, "some$0Text"); 

$0 is the character group matching the pattern \d+. You can also write

string result = Regex.Replace(input, pattern, m => "some"+ m.Groups[0]+ "Text"); 

Fiddle: https://dotnetfiddle.net/JUknx2

like image 138
fubo Avatar answered Nov 15 '22 04:11

fubo