简体   繁体   中英

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM