我有类似A, something happened [1], something else [2], whatever [3]
的字符串值,并想将其替换为A, something happened {0}, something else {1}, whatever {2}
。
因此,如果之间有一个数字,则基本上将[
替换为{
,将]
替换为}
,然后将数字减少1。正则表达式有可能吗?
到目前为止,我知道了:
var text = "A, something happened [1], something else [2], whatever [3]";
var result = Regex.Replace(text, @"\[(\d+)\]", @"{$1}");
Console.Write(result);
但是,这给了我A, something happened {1}, something else {2}, whatever {3}
。
是否可以将数字减一?
答案 0 :(得分:2)
您可以减少比赛评估器中的数字:
var text = "A, something happened [1], something else [2], whatever [3]";
var result = Regex.Replace(text, @"\[(\d+)\]", m => $"{{{int.Parse(m.Groups[1].Value)-1}}}");
Console.Write(result); // => A, something happened {0}, something else {1}, whatever {2}
请参见C# demo
如果无法将数字转换为整数,请使用int.TryParse
:
var result = Regex.Replace(text, @"\[(\d+)\]", m =>
int.TryParse(m.Groups[1].Value, out var number) ? $"{{{number - 1}}}" : m.Value);
对于C#7之前的C#:
var result = Regex.Replace(text, @"\[(\d+)\]", m => {
int number;
if (int.TryParse(m.Groups[1].Value, out number))
{
return $"{{{number-1}}}";
}
else
{
return m.Value;
}
});