簡體   English   中英

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

[英]How do I replace part of a string in C#?

假設我有以下字符串:

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

我想將 'tag' 更改為 'newTag' 所以結果是:

"<newTag>text</newTag>"

最好的方法是什么?

我試圖搜索 <[/]*tag> 但后來我不知道如何在我的結果中保留可選的 [/] ...

為什么在可以執行以下操作時使用正則表達式:

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

或者

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

編輯為@RaYell 的評論

要使其可選,只需添加一個“?” 在“/”之后,像這樣:

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

你最基本的正則表達式可能是這樣的:

// 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));
}
var input = "<tag>text</tag>";
var result = Regex.Replace(input, "(</?).*?(>)", "$1newtag$2");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM