C# 字符串替换为模式匹配

C# 字符串替换为模式匹配,c#,regex,string,replace,C#,Regex,String,Replace,我从数据库中提取了以下变量字符串,每次都会更改: 例如,第一次我的字符串是: 您可以使用[xyz]框架开发[123]、web和[abc]应用程序 第二次我的字符串是: 您可以使用[aaa]框架开发[bbb]、web和[ccc]应用程序 我想换一个 [xyz]或带有.NET的[aaa] [123]或带有桌面的[bbb],以及 [abc]或带有手机的[ccc] 大括号中的文本将更改,因为它是一个可变字符串,但我想将第一个大括号中的文本替换为.NET,第二个大括号中的文本替换为desktop,第三

我从数据库中提取了以下变量字符串,每次都会更改:

例如,第一次我的字符串是:

您可以使用[xyz]框架开发[123]、web和[abc]应用程序

第二次我的字符串是:

您可以使用[aaa]框架开发[bbb]、web和[ccc]应用程序

我想换一个

  • [xyz]
    或带有
    .NET的[aaa]

  • [123]
    或带有
    桌面的[bbb],以及

  • [abc]
    或带有
    手机的[ccc]

大括号中的文本将更改,因为它是一个可变字符串,但我想将第一个大括号中的文本替换为
.NET
,第二个大括号中的文本替换为
desktop
,第三个大括号中的文本替换为
mobile

转换后的字符串应为-

您可以使用.NET Framework开发桌面、web和移动应用程序:

使用C#中的字符串替换最简单的方法是什么?

您可以执行以下操作:

// established sometime earlier
string firstPlaceholder = "[xyz]";
string secondPlaceholder = "[123]";
string thirdPlaceholder = "[abc]";

// then when you need to do the replacement
string result = originalString.Replace(firstPlaceholder, ".NET")
                              .Replace(secondPlaceholder, "desktop")
                              .Replace(thirdPlaceholder, "mobile");
改用


您可以使用正则表达式执行任何操作:

// Error checking needed.....
string input = "You can use the [xyz] Framework to develop [123], web, and [abc] apps";
Regex re = new Regex(@"(\[[^\]]+\])");
MatchCollection matches = re.Matches(input);
input = input.Replace(matches[0].Value, ".NET").Replace(matches[1].Value, "desktop").Replace(matches[2].Value, "mobile");

结合我和Jonny Mopp的回答:

        Regex reg = new Regex(@"(\[[^\]]+\])");

        string origString = "You can [xyz] blah blah [abc]";

        var coll = reg.Matches(origString);

        for(int i=0;i<coll.Count; i++)
        {
            origString = origString.Replace(coll[i].Value,"{"+i+"}");
        }

        var newString = string.Format(origString,".Net","desktop");
Regex reg=newregex(@“(\[^\]]+\]);
string origString=“您可以[xyz]胡说八道[abc]”;
var coll=注册匹配(原始字符串);

对于(inti=0;i,尽管这个答案似乎有点晚了

string input = "You can use the [xyz] Framework to develop [123], web, and [abc] apps";
var pairs = new Dictionary<string, string>()
{
    {"xyz",".NET"},
    {"123","desktop"},
    {"abc","mobile"},
};

var output = Regex.Replace(input, @"\[(.+?)\]", m => pairs[m.Groups[1].Value]);
string input=“您可以使用[xyz]框架开发[123]、web和[abc]应用程序”;
var pairs=新字典()
{
{“xyz”,“.NET”},
{“123”,“桌面”},
{“abc”,“mobile”},
};
var output=Regex.Replace(输入,@“\[(.+?)\]”,m=>pairs[m.Groups[1].Value]);
输出:


您可以使用.NET Framework开发桌面、web和移动应用程序

执行三个单独的替换。三个正则表达式,如
s/the\[^\]*\]Framework/the.Net Framework/
应该可以工作。询问代码的问题必须证明在解决实际问题时尽了最小的努力,包括尝试的代码和遇到的问题。如果每次都是相同的文本,我可以进行三次单独的替换,但大括号中的文本每次都会更改。文本实际上是在大括号中还是在大括号中这只是一个例子?如果没有实际的大括号,那么您的正则表达式看起来更像
s/the\s+\s+\s+Framework/the.Net Framework/
…是
[xyz]
每次更改的部分,或
.NET
部分,或两者都更改?大括号中的文本将change@MarcinJuraszek我认为提问者可以从我提供的内容中找出其余的内容,但我修改了答案,将占位符移动到变量中。为什么所有的反对票?我认为这不符合OP的要求,因为hat
[xyz]
和其他字符串“由于它是一个可变字符串,所以会发生变化…”string.Format()是针对OP建议的确切情况而设计的。但是您正在更改原始字符串。OP如何在其中获得
{0}
{1}
{2}
?@Ryan感谢您的回答!我做不到(var firstString=“.Net”)因为我不确定大括号中会有什么文本。我从数据库中提取字符串,它会不断变化。因此,我必须使用某种模式。啊-那么这可能不起作用,除非你改变数据库中的字符串以遵循上面的模式。谢谢!我会检查它并让你知道!这会起作用,但是在我看来,它做了太多的工作来替换两次…我试图使它能够替换字符串中任意数量的括号。
string input = "You can use the [xyz] Framework to develop [123], web, and [abc] apps";
var pairs = new Dictionary<string, string>()
{
    {"xyz",".NET"},
    {"123","desktop"},
    {"abc","mobile"},
};

var output = Regex.Replace(input, @"\[(.+?)\]", m => pairs[m.Groups[1].Value]);