c#Regex忽略文本周围的可选标签

时间:2017-07-11 21:07:06

标签: c# html asp.net .net regex

问题:

所以我想说我有以下字符串:

const myList = [{id:0,name:'Joe'},{id:1,name:'Sally'},{id:2,name:'Chris'},{id:3,name:'Tiffany'},{id:4,name:'Kerry'}];

const slice = (arr, num) => [...arr.slice(num), ...arr.slice(0, num)];

console.log(slice(myList, 2));

我正在尝试使用regex.replace删除<p><span style=\"font-weight:bold;\">Description:</span>Thomas is currently developing a enterprise resource management course for Pluralsight </p>

通常,开始标记和结束标记都不会出现,因此这两者都必须是可选的。它们也不会总是跨越。我唯一可以保证的是“描述:”这个词会出现。

我尝试了什么:

这是我能得到的尽可能接近:

<span style=\"font-weight:bold;\">Description:</span>

不幸的是,起始捕获组也在抓取起始标签。我需要这样做,以便永远不会超过1个开始或结束标记。

当我在a:

中使用它时
(?:<.*>)?Description:(?:<\/.*>)?

我正在被遣返

Regex.Replace(text, @"(?:<.*>)?Description:(?:<\\/.*>)?", "")

带有不应捕获的结束范围标记,并且缺少起始标记...

修改 虽然类似于@kblok发布的帖子,但我只想删除第一个周围的标签,如果它存在的话。这个主题是关于删除所有周围的标签。因此我删除p标签的问题

2 个答案:

答案 0 :(得分:1)

假设您不必担心引用尖括号,可以使用

(?:<[^<]*>)?Description:(?:<\/[^<]*>)?

改进模式以强制开始/结束标记名称匹配及仅在描述之外,还删除描述:当标记不存在时。

(?:(?<open><)(?<start>[^ >]+)[^<>]*>)?Description:\k<open>\/?\k<start>>|Description:

答案 1 :(得分:0)

此模式明确排除了var PrinterPath = `\\\\${PrintServer}\\${Printer}`; 代码。

<p>

这个相同,但对匹配开始和结束标签更严格。它还允许标签之间的空白

(?:<(?!p>|/)[^<>]*>)?Description:(?:</[^<>]*>)?

考虑到VDWWD的警告,即使这个丑陋的事情可能有点天真,考虑到所有可能的HTML格式变化,但它至少应该与您所描述的格式良好的简单案例相匹配。