在数学运算中,正则表达式匹配和替换操作符是什么?

5

给定一个输入字符串

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

我需要查找并用包含运算符的字符串替换每个运算符。
some12text/some3text
some12text*some2text/some12text
(some12text*some54text)/(some3text/some4text)

实际应用: 从后端(使用c#),我有以下字符串

34*157

which i need to translate to:

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

并返回到可以在eval()函数中运行的屏幕。

到目前为止,我已经

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
}

注意:在foreach循环中我不能进行全局的Replace(),因为它可能会错误地替换(12/123) - 它只应该匹配第一个12并进行替换。

注意2:我可以使用string.Remove和string.Insert,但这会改变第一个匹配后的字符串,从而破坏下一次匹配的计算。

欢迎提供任何指导意见。


1
真的需要 Regex.Replace(s, @"\d+", "document.getElementById(\"$&\").value") 吗?为什么不使用 Regex.Matches - Wiktor Stribiżew
1个回答

2

给你

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

$0 是匹配模式 \d+ 的字符组。你也可以这样写:

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

Fiddle: https://dotnetfiddle.net/JUknx2


1
惊人 - 爱这种简洁! - Ash M

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接