Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 替换单个字符左右两侧的字符_C#_Regex_String_Replace - Fatal编程技术网

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是邪恶的”。。。问题没有说“运行表达式”。我们都假设暗示的陈述可能是错误的。当然,我并不是说你不能试图找出这个问题的更大意义。。。因为我可以试着为你的评论找出一个更大的意义。谢谢,我将测试这个,因为字符串上的@是好的和容易的。谢谢,我将测试这个,因为字符串上的@是好的和容易的。