我有以下内容:
string text = "version=\"1,0\"";
我希望将comma
替换为dot
,同时保留1和0,但要记住它们在不同情况下会有所不同!它可能是version="2,3"
。
自作聪明和noob-unworking方式是:
for (int i = 0; i <= 9; i++)
{
for (int z = 0; z <= 9; z++)
{
text = Regex.Replace(text, "version=\"i,z\"", "version=\"i.z\"");
}
}
但当然..它是一个字符串,我不希望i
和z
在那里表现为字符串。
我也可以尝试蹩脚但工作方式:
text = Regex.Replace(text, "version=\"1,", "version=\"1.");
text = Regex.Replace(text, "version=\"2,", "version=\"2.");
text = Regex.Replace(text, "version=\"3,", "version=\"3.");
依此类推..但它会很蹩脚。
有关如何单手处理此事的任何提示?
编辑:我有其他逗号我不想替换,所以text.Replace(",",".")
无法做到
答案 0 :(得分:5)
你需要这样的正则表达式来找到逗号
Regex reg = new Regex("(version=\"[0-9]),([0-9]\")");
然后进行重新说明:
text = reg.Replace(text, "$1.$2");
您可以使用$ 1,$ 2等按顺序引用匹配的组。
答案 1 :(得分:2)
答案 2 :(得分:1)
您可以使用捕获组将数字保留在前面和后面以便更换,以便采用更“传统的方式”:
string text = "version=\"1,0\"";
var regex = new Regex(@"version=""(\d*),(\d*)""");
var result = regex.Replace(text, "version=\"$1.$2\"");
在正则表达式中使用如上所述的parens是创建一个捕获组(因此可以在以后需要时访问匹配的部分),以便在上面,逗号之前和之后的数字将存储在{{1}中分别和$1
。
但是我决定进一步深入研究一下,如果版本中有多个逗号可以替换,那么我们会考虑这种情况,即文本是$2
。实现上述目标实际上是单调乏味的,您必须为每个“类型”版本替换一个。所以这里有一个解决方案,有时被称为其他语言的回调(不是C#开发,但我摆弄lambda函数,它似乎工作:)):
version="1,1,0"
上面给出了private static string SpecialReplace(string text)
{
var result = text.Replace(',', '.');
return result;
}
public static void Main()
{
string text = "version=\"1,0,0\"";
var regex = new Regex(@"version=""[\d,]*""");
var result = regex.Replace(text, x => SpecialReplace(x.Value));
Console.WriteLine(result);
}
。
version="1.0.0"
将首先匹配"version=""[\d,]*"""
中的任何数字和逗号序列,然后将其传递到替换的下一行。
replace获取匹配的文本,将其传递给lambda函数,该函数将其带到函数version="..."
,其中仅在匹配的部分上执行简单的文本替换。