gpt4 book ai didi

c# - 用字符串中给定模式的值替换

转载 作者:太空宇宙 更新时间:2023-11-03 10:24:37 24 4
gpt4 key购买 nike

给定一个这种格式的文件

// Colour
$primary-colour: if(@Model.PrimaryColour, @primaryColour, #afd05c);
$secondary-colour: if(@secondaryColour, @secondaryColour, #323f47);
// and so on

我正在尝试替换@Model。基于字典的任何内容都将是这样的

var dictionary = new Dictionary<string, string>
{
{"primaryColour", "blue"},
{"secondaryColour", "red"}
};

但我正在努力寻找一种方法。

我正在考虑做这样的事情:

private static String Replace(String str)
{
var dictionary = new Dictionary<string, string>
{
{"primaryColour", "blue"},
{"secondaryColour", "red"}
};

string variableValue;
string pattern = @"@Model.(?<name>\w)";
dictionary.TryGetValue(FirstCharacterToLower("${name}"), out variableValue);
var replacePattern = String.Format("{0}", variableValue);
return Regex.Replace(str, pattern, replacePattern, RegexOptions.IgnoreCase);
}

private static string FirstCharacterToLower(string str)
{
Console.WriteLine(str);
if (String.IsNullOrEmpty(str) || Char.IsLower(str, 0))
return str;

return Char.ToLowerInvariant(str[0]) + str.Substring(1);
}

但是我传递给 FirstCharacterToLower 的只是一个字符串 {name},我被困在那里了。想不出办法。

知道从这里到哪里去吗?

谢谢

编辑:基于 sln 评论我做了这个并且它有效

using System;
using System.Text.RegularExpressions;
using System.Collections.Generic;

public class Program
{
public static void Main()
{

var input = @"
// Colour
$primary-colour: if(@Model.PrimaryColour, @Model.PrimaryColour, #afd05c);
$secondary-colour: if(@Model.SecondaryColour, @Model.SecondaryColour, #323f47);";

Console.WriteLine(Replace(input));
}

private static String Replace(String str)
{
var dictionary = new Dictionary<string, string>
{
{"primaryColour", "blue"},
{"secondaryColour", "red"}
};

var regex = new Regex(@"@Model\.(?<name>\w+)");

var output = regex.Replace(str, v =>
{
string outVariable;
dictionary.TryGetValue(GetNameOfVariable(v.Groups["name"].Value), out outVariable);
return outVariable;
});

return output;
}

private static string GetNameOfVariable(string str)
{
Console.WriteLine(str);
if (String.IsNullOrEmpty(str) || Char.IsLower(str, 0))
return str;

return Char.ToLowerInvariant(str[0]) + str.Substring(1);
}
}

最佳答案

正如@sln 所说,您必须使用委托(delegate)。

private static String Replace(String str)
{
var dictionary = new Dictionary<string, string>
{
{"primaryColour", "blue"},
{"secondaryColour", "red"}
};

string pattern = @"@Model\.(?<name>\w+)";
return Regex.Replace(str, pattern, m =>
{
string key = m.Groups["name"].Value;
key = FirstCharacterToLower(key);
string value = null;
if (dictionary.TryGetValue(key, out value))
return value;
else
return m.Value;
});
}

关于c# - 用字符串中给定模式的值替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32077067/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com