正则表达式从字符串中删除特定标记及其内容

时间:2015-10-23 22:39:26

标签: c# regex

我有一个给定的字符串:

"Hi there <ss type="laugh">:)</ss>"

当我使用

Regex.Replace(s, @"<(.|\n)*?>", string.Empty);

它让我回头

"Hi there :)"

如何修改Expression以删除所有“ss”标签以及它们之间的所有内容?

1 个答案:

答案 0 :(得分:1)

该字符串包含常规XML标记,因此您可以使用XElement

此代码将保留外部元素的文本(文本在标记之外):

var s = "Hi there <ss type=\"laugh\">:)</ss>";
var el = XElement.Parse(string.Format("<root1>{0}</root1>", s));
var result = string.Concat(el.Nodes().OfType<XText>().Select(t => t.Value)).Trim();

enter image description here

确保使用System.Xml.Linq命名空间。

如果您有其他XML标记,并且只想删除ss标记:

var s = "<b>Hi</b> there <ss type=\"laugh\">:)</ss>";
var el = XElement.Parse(string.Format("<root1>{0}</root1>", s));
el.Descendants("ss").Remove();
var reader = el.CreateReader();
reader.MoveToContent();
var result2 = reader.ReadInnerXml().Trim();

结果:enter image description here