替换尖括号

时间:2016-01-07 15:06:56

标签: c# regex string

故事: 我有一个列表框,显示当前应用程序的所有方法。我需要将方法参数的数据类型着色为蓝色。

解决方案:首先,我在括号之间提取内容。第二,我想通过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#");
            }
        }

任何建议都受到高度赞赏。

1 个答案:

答案 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>

Herem.Groups[1].Value将保留string, string,替换将在输入字符串本身完成,而不是Regex.Match对象。