C# 替换单个字符左右两侧的字符
假设我有这个字符串:C# 替换单个字符左右两侧的字符,c#,regex,string,replace,C#,Regex,String,Replace,假设我有这个字符串: 3+5+6+2^5+9+1+2+32^2+10^10 我想用以下示例替换“^”左右两侧出现的所有数字,包括“^”,但不包括数字的结尾,例如+符号: 2^5现在应该变成战俘(2,5) 32^2现在应该成为战俘(32,2) 10^10现在应该成为战俘(10,10) 我正在寻找某种正则表达式或字符串替换,它只替换“^”符号左右两侧的数字(可以是小数),而这些数字是较大字符串的一部分。我的大脑正在痛苦地试图使这项工作完全正确。你可以用小组来代替 Regex.Replace("
3+5+6+2^5+9+1+2+32^2+10^10
我想用以下示例替换“^”左右两侧出现的所有数字,包括“^”,但不包括数字的结尾,例如+符号:
- 2^5现在应该变成战俘(2,5)
- 32^2现在应该成为战俘(32,2)
- 10^10现在应该成为战俘(10,10)
我正在寻找某种正则表达式或字符串替换,它只替换“^”符号左右两侧的数字(可以是小数),而这些数字是较大字符串的一部分。我的大脑正在痛苦地试图使这项工作完全正确。你可以用小组来代替
Regex.Replace("yourString",@"(\d+)\^(\d+)","Pow($1,$2)");
(\d+)
和(\d+)
分为两组,即组1
和组2
(不是组0,因为它包含整个匹配项)
替换时,您可以使用
$1
和$2
在替换字符串中引用这些组,您可以使用组替换
Regex.Replace("yourString",@"(\d+)\^(\d+)","Pow($1,$2)");
(\d+)
和(\d+)
分为两组,即组1
和组2
(不是组0,因为它包含整个匹配项)
更换时,您可以使用刚刚测试的
$1
和$2
在替换字符串中引用这些组,并在此处工作:
var str = Regex.Replace("3+5+6+2^5+9+1+2+32^2+10^10",
@"(\d+)\^(\d+)", "Pow($1,$2)");
如果您需要对更换进行更多控制:
var str = Regex.Replace("3+5+6+2^5+9+1+2+32^2+10^10",
@"(\d+)\^(\d+)",
m => string.Format("Pow({0},{1})", m.Groups[1].Value, m.Groups[2].Value ));
刚刚测试,在这里工作:
var str = Regex.Replace("3+5+6+2^5+9+1+2+32^2+10^10",
@"(\d+)\^(\d+)", "Pow($1,$2)");
如果您需要对更换进行更多控制:
var str = Regex.Replace("3+5+6+2^5+9+1+2+32^2+10^10",
@"(\d+)\^(\d+)",
m => string.Format("Pow({0},{1})", m.Groups[1].Value, m.Groups[2].Value ));
我现在就尝试一下,谢谢你的快速回答。我是否需要避开\like so(编译器正在抱怨):Regex.Replace(v,“(\\d+)^(\\d+)”,“Pow($1,$2)”;您需要将
@
放在字符串之前,或转义“\”字符。如:@”(\d+)\ ^(\d+)”
或此“(\\d+)\ ^(\\d+)”
确定,此答案是第一个答案,并且有效。下面Miguel Angelo给出的答案也很有效。我现在就试试看,谢谢你的快速回答。我是否需要避开\like so(编译器正在抱怨):Regex.Replace(v,“(\\d+)^(\\d+)”,“Pow($1,$2)”;您需要将@
放在字符串之前,或转义“\”字符。如:@”(\d+)\ ^(\d+)”
或此“(\\d+)\ ^(\\d+)”
确定,此答案是第一个答案,并且有效。下面Miguel Angelo给出的答案同样有效。你应该真正解析它,而不是抛出正则表达式。它不能解释操作的顺序。当你说parse时,你的意思是什么?我正在通过一个数学解析器运行我的表达式,但该解析器不支持^@Jeff Mercado:为什么正则表达式如此邪恶?在这个竞争激烈的世界里,客观性很重要。@MiguelAngelo:我说过“regex是如此邪恶吗?”不,我没有这样说。他显然是想把一些数学表达式转换成可能的可执行代码。他不妨把它做好。正则表达式是一种工具,他用错了工具。接下来的问题是,“为什么这个正则表达式不能正确地对这些进行分组……我可以分别匹配它们。”可以想象,他接下来可能解析的是1^1^1
。看看这个问题,然后决定什么是正确的解决方案…@JeffMercado:不说并不意味着没有暗示。也许你说的我错了。。。也许你对这个问题的看法是错误的。。。你没说“regex是邪恶的”。。。问题没有说“运行表达式”。我们都假设暗示的陈述可能是错误的。当然,我并不是说你不能试图找出这个问题的更大意义。。。我可以试着为你的评论找出一个更大的意义。你应该真正解析它,而不是抛出正则表达式。它不能解释操作的顺序。当你说parse时,你的意思是什么?我正在通过一个数学解析器运行我的表达式,但该解析器不支持^@Jeff Mercado:为什么正则表达式如此邪恶?在这个竞争激烈的世界里,客观性很重要。@MiguelAngelo:我说过“regex是如此邪恶吗?”不,我没有这样说。他显然是想把一些数学表达式转换成可能的可执行代码。他不妨把它做好。正则表达式是一种工具,他用错了工具。接下来的问题是,“为什么这个正则表达式不能正确地对这些进行分组……我可以分别匹配它们。”可以想象,他接下来可能解析的是1^1^1
。看看这个问题,然后决定什么是正确的解决方案…@JeffMercado:不说并不意味着没有暗示。也许你说的我错了。。。也许你对这个问题的看法是错误的。。。你没说“regex是邪恶的”。。。问题没有说“运行表达式”。我们都假设暗示的陈述可能是错误的。当然,我并不是说你不能试图找出这个问题的更大意义。。。因为我可以试着为你的评论找出一个更大的意义。谢谢,我将测试这个,因为字符串上的@是好的和容易的。谢谢,我将测试这个,因为字符串上的@是好的和容易的。