如何在C#中替换部分字符串?

时间:2010-03-26 11:06:25

标签: c# regex

假设我有以下字符串:

string str = "<tag>text</tag>";

我想将'tag'更改为'newTag',结果将是:

"<newTag>text</newTag>"

最好的方法是什么?

我试图搜索&lt; [/] * tag&gt;但后来我不知道如何在我的结果中保留可选的[/] ......

5 个答案:

答案 0 :(得分:21)

为什么在可以的时候使用正则表达式:

string newstr = str.Replace("tag", "newtag");

string newstr = str.Replace("<tag>","<newtag>").Replace("</tag>","</newtag>");

编辑@ RaYell的评论

答案 1 :(得分:3)

要使其成为可选项,只需添加“?”在“/”之后,就像这样:

<[/?]*tag>

答案 2 :(得分:0)

string str = "<tag>text</tag>";
string newValue = new XElement("newTag", XElement.Parse(str).Value).ToString();

答案 3 :(得分:0)

你最基本的正则表达式可以是:

// find '<', find an optional '/', take all chars until the next '>' and call it
//   tagname, then take '>'.
<(/?)(?<tagname>[^>]*)>

如果您需要匹配每个标签。


或者使用正向前瞻:

<(/?)(?=(tag|othertag))(?<tagname>[^>]*)>

如果您只想要tagothertag代码。


然后遍历所有比赛:

string str = "<tag>hoi</tag><tag>second</tag><sometag>otherone</sometag>";

Regex matchTag = new Regex("<(/?)(?<tagname>[^>]*)>");
foreach (Match m in matchTag.Matches(str))
{
    string tagname = m.Groups["tagname"].Value;
    str = str.Replace(m.Value, m.Value.Replace(tagname, "new" + tagname));
}

答案 4 :(得分:0)

var input = "<tag>text</tag>";
var result = Regex.Replace(input, "(</?).*?(>)", "$1newtag$2");