故事: 我有一个列表框,显示当前应用程序的所有方法。我需要将方法参数的数据类型着色为蓝色。
解决方案:首先,我在括号之间提取内容。第二,我想通过COMMA分拆它们
问题:
如果参数需要多次出现IDictionary<string, string>
之类的内容,那么上述解决方案就会面临问题!!因此,我决定首先获取尖括号之间的所有内容,然后将其逗号替换为"#COMMA#"
,并在使用上述解决方案执行任务后,只需将"#COMMA#"
替换为“,”。但是,根据找到的解决方案HERE,无法将任何值设置为match.value
。这是我的代码:
if (methodArgumentType.Contains("<") && methodArgumentType.Contains(">"))
{
var regex = new Regex("(?<=<).*?(?=>)");
foreach (Match match in regex.Matches(methodArgumentType))
{
match.Value = match.Value.Replace(",", "#COMMA#");
}
}
任何建议都受到高度赞赏。
答案 0 :(得分:0)
您需要在Regex.Replace
中的匹配评估程序中替换匹配的值:
var methodArgumentType = "IDictionary<string, string>";
if (methodArgumentType.Contains("<") && methodArgumentType.Contains(">"))
{
methodArgumentType = Regex.Replace(methodArgumentType, @"<([^<>]+)>",
m => string.Format("<{0}>", m.Groups[1].Value.Replace(",", "#COMMA#")));
}
Console.WriteLine(methodArgumentType);
// => IDictionary<string#COMMA# string>
Here,m.Groups[1].Value
将保留string, string
,替换将在输入字符串本身完成,而不是Regex.Match
对象。