c# Regex 忽略文本周围的可选标签
c# Regex ignore optional tags around text
问题:
假设我有以下字符串:
<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:"这个词会出现。
我试过的:
这是我所能得到的最接近的结果:
(?:<.*>)?Description:(?:<\/.*>)?
不幸的是,起始捕获组也正在捕获起始 p 标签。我需要做到不超过 1 个开始或结束标记。
还有当我用它的时候:
Regex.Replace(text, @"(?:<.*>)?Description:(?:<\/.*>)?", "")
我被退回了
</span>Thomas is currently developing a enterprise resource management course for Pluralsight </p>
不应该捕获的结束 span 标签和缺少起始 p 标签...
编辑:
尽管与@kblok 发布的帖子类似,但我只想删除第一个周围的标签(如果存在)。这个线程是关于删除所有周围的标签。因此我删除 p 标签的问题
假设您不需要担心带引号的尖括号,您可以使用
(?:<[^<]*>)?Description:(?:<\/[^<]*>)?
改进模式以强制执行 start/end 标签名称匹配并仅在描述周围,同时删除描述:当标签不存在时。
(?:(?<open><)(?<start>[^ >]+)[^<>]*>)?Description:\k<open>\/?\k<start>>|Description:
此模式明确排除 <p>
个标签。
(?:<(?!p>|/)[^<>]*>)?Description:(?:</[^<>]*>)?
这个也是一样的,但是对开始和结束标签的匹配更加严格。它还允许在标签
之间使用白色 space
(?:<(?!p>|/)(?<tag>[^ >]+)(?=[ >])[^<>]*>)?\s*Description:\s*(?:<\/\k<tag>[^<>]*>)?
考虑到 VDWWD 的警告,考虑到所有可能的 HTML 格式变化,即使是这个丑陋的东西也可能有点幼稚,但它至少应该与您所描述的格式正确的简单情况相匹配。
问题:
假设我有以下字符串:
<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:"这个词会出现。
我试过的:
这是我所能得到的最接近的结果:
(?:<.*>)?Description:(?:<\/.*>)?
不幸的是,起始捕获组也正在捕获起始 p 标签。我需要做到不超过 1 个开始或结束标记。
还有当我用它的时候:
Regex.Replace(text, @"(?:<.*>)?Description:(?:<\/.*>)?", "")
我被退回了
</span>Thomas is currently developing a enterprise resource management course for Pluralsight </p>
不应该捕获的结束 span 标签和缺少起始 p 标签...
编辑: 尽管与@kblok 发布的帖子类似,但我只想删除第一个周围的标签(如果存在)。这个线程是关于删除所有周围的标签。因此我删除 p 标签的问题
假设您不需要担心带引号的尖括号,您可以使用
(?:<[^<]*>)?Description:(?:<\/[^<]*>)?
改进模式以强制执行 start/end 标签名称匹配并仅在描述周围,同时删除描述:当标签不存在时。
(?:(?<open><)(?<start>[^ >]+)[^<>]*>)?Description:\k<open>\/?\k<start>>|Description:
此模式明确排除 <p>
个标签。
(?:<(?!p>|/)[^<>]*>)?Description:(?:</[^<>]*>)?
这个也是一样的,但是对开始和结束标签的匹配更加严格。它还允许在标签
之间使用白色 space(?:<(?!p>|/)(?<tag>[^ >]+)(?=[ >])[^<>]*>)?\s*Description:\s*(?:<\/\k<tag>[^<>]*>)?
考虑到 VDWWD 的警告,考虑到所有可能的 HTML 格式变化,即使是这个丑陋的东西也可能有点幼稚,但它至少应该与您所描述的格式正确的简单情况相匹配。