假设我有以下字符串:
string str = "<tag>text</tag>";
我想将'tag'更改为'newTag',结果将是:
"<newTag>text</newTag>"
最好的方法是什么?
我试图搜索&lt; [/] * tag&gt;但后来我不知道如何在我的结果中保留可选的[/] ......
答案 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>[^>]*)>
如果您只想要tag
和othertag
代码。
然后遍历所有比赛:
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");