任何人都可以告诉我正则表达式模式,它检查空的span标签并用标签替换它们。
如下所示:
string io = Regex.Replace(res,"" , RegexOptions.IgnoreCase);
我不知道要传递的模式!
答案 0 :(得分:2)
此模式将找到所有空的span标记,例如<span/>
和<span></span>
:
<span\s*/>|<span>\s*</span>
因此,此代码应使用br标记替换所有空span标记:
string io = Regex.Replace(res, @"<span\s*/>|<span>\s*</span>", "<br/>");
答案 1 :(得分:2)
Jeff Mercado的代码在行上有错误:
.Where(e => e.Name.Equals("span", StringComparison.OrdinalIgnoreCase)
&& n.Name.Equals("span", StringComparison.OrdinalIgnoreCase)
错误讯息:Member 'object.Equals(object, object)' cannot be accessed with an instance reference; qualify it with a type name instead
当我尝试替换其他物体时,它们无效!
答案 2 :(得分:0)
我对这个问题最喜欢的答案是:RegEx match open tags except XHTML self-contained tags
答案 3 :(得分:0)
你应该解析它,搜索空的span元素并替换它们。以下是使用LINQ to XML进行操作的方法。请注意,根据实际的HTML,可能需要调整才能使其工作,因为 是XML解析器,而不是HTML。
// parse it
var doc = XElement.Parse(theHtml);
// find the target elements
var targets = doc.DescendantNodes()
.OfType<XElement>()
.Where(e => e.Name.Equals("span", StringComparison.OrdinalIgnoreCase)
&& e.IsEmpty
&& !e.HasAttributes)
.ToList(); // need a copy since the contents will change
// replace them all
foreach (var span in targets)
span.ReplaceWith(new XElement("br"));
// get back the html string
theHtml = doc.ToString();
否则,这里有一些代码显示如何使用HTML Agility Pack执行相同的操作(以与其他版本相同的方式编写)。
// parse it
var doc = new HtmlDocument();
doc.LoadHtml(theHtml);
// find the target elements
var targets = doc.DocumentNode
.DescendantNodes()
.Where(n => n.NodeType == HtmlNodeType.Element
&& n.Name.Equals("span", StringComparison.OrdinalIgnoreCase)
&& !n.HasChildNodes && !n.HasAttributes)
.ToList(); // need a copy since the contents will change
// replace them all
foreach (var span in targets)
{
var br = HtmlNode.CreateNode("<br />");
span.ParentNode.ReplaceChild(br, span);
}
// get back the html string
using (StringWriter writer = new StringWriter())
{
doc.Save(writer);
theHtml = writer.ToString();
}