Как заменить часть строки в C #? - PullRequest
4 голосов
/ 26 марта 2010

Предположим, у меня есть следующая строка:

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

И я хотел бы изменить 'tag' на 'newTag', чтобы результат был:

"<newTag>text</newTag>"

Каков наилучший способ сделать это?

Я пытался найти тег <[/] *, но потом я не знаю, как сохранить необязательный [/] в моем результате ... </p>

Ответы [ 5 ]

21 голосов
/ 26 марта 2010

Зачем использовать регулярные выражения, когда вы можете сделать:

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

или

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

Отредактировано в комментарии @ RaYell

3 голосов
/ 26 марта 2010

Чтобы сделать это необязательным, просто добавьте "?" ПОСЛЕ "/", КАК ЭТО:

<[/?]*tag>
0 голосов
/ 26 марта 2010
var input = "<tag>text</tag>";
var result = Regex.Replace(input, "(</?).*?(>)", "$1newtag$2");
0 голосов
/ 26 марта 2010

Ваш самый простой регулярное выражение может читать что-то вроде:

// 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));
}
0 голосов
/ 26 марта 2010
string str = "<tag>text</tag>";
string newValue = new XElement("newTag", XElement.Parse(str).Value).ToString();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...