【发布时间】:2017-07-11 21:07:05
【问题描述】:
问题:
假设我有以下字符串:
<p><span style=\"font-weight:bold;\">Description:</span>Thomas is currently
developing a enterprise resource management course for Pluralsight </p>
我正在尝试执行 regex.replace 来删除 <span style=\"font-weight:bold;\">Description:</span>
通常开始标签和结束标签都不会出现,所以这两个都必须是可选的。而且它们并不总是跨度。我唯一能保证的是“描述:”这个词会出现。
我的尝试:
这是我能得到的最接近的:
(?:<.*>)?Description:(?:<\/.*>)?
不幸的是,起始捕获组也在抓取起始 p 标签。我需要做到这一点,以使开始或结束标签永远不会超过 1 个。
当我使用它时:
Regex.Replace(text, @"(?:<.*>)?Description:(?:<\\/.*>)?", "")
我被退回
</span>Thomas is currently developing a enterprise resource management course for Pluralsight </p>
带有不应捕获的结束跨度标记和缺少起始 p 标记...
编辑: 虽然类似于@kblok 发布的线程,但我只想删除第一个周围的标签(如果它存在)。该线程是关于删除所有周围的标签。因此我删除 p 标签的问题
【问题讨论】:
-
使用正则表达式解析html并不是一个好主意。你会遇到各种各样的问题。有HTML agility pack你可以试试。
-
我目前正在广泛使用 htmlagilitypack,但在这种情况下,我相信正则表达式会更合适。我的文本中有多个分隔符,我在其中使用正则表达式来分割、突出显示和提取。我不能总是假设分隔符会被包含在 span 标签中。
-
是否要删除描述:即使它没有任何标签?
标签: c# html asp.net .net regex