Ваш самый простой регулярное выражение может читать что-то вроде:
// 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));
}