【问题标题】:RegEx in C# to get all SPAN tags with a specific Class nameC# 中的 RegEx 以获取具有特定类名的所有 SPAN 标记
【发布时间】:2017-10-09 19:37:27
【问题描述】:

我需要使用 CLASS CLASSIFY 获取所有 SPAN 标签。在一种情况下,我正在使用的 RegEx 正在跳过第一个 SPAN 标记。

正则表达式

<span [^>]*class=\"classify\"(.*?)</span>

C# 代码

Regex.Matches(content, "<span [^>]*class=\"classify\"(.*?)</span>", RegexOptions.Multiline)

内容:

<span categoryid="110" categorytext="(Sup ed (Inl))" class="classify" classifyid="3395349" quoteid="" quotetext="" selectedclassify="true" style="font-weight: bold; background-color: #ffa500">
<u>Objective/reason for interaction</u>
<br />  wtwt
<br />  &nbsp;
<br />  <u>Summary</u><br />  As  -16/08/15</span>
<br />  &nbsp;
<br />  
<u>Actions</u>
<br />  N
<br />  &nbsp;
<br />  
<u>Outcomes/reportables</u>
<br />  
<span categorytext="(Nofrf of J Ced)" class="classify" quoteid="" quotetext="" selectedclassify="false" style="categoryid=&quot;13416&quot;">1 full </span>
<br />  A Mag
<br />  &nbsp;
<br />  
<u>K</u>
<br />  As ab
<br />  

.Net RegEx 测试器的链接:

Sample

请指教,我在 RegEx 中缺少什么。

【问题讨论】:

  • HTML 不是常规语言。您不能使用常规语言解析器(即 RegEx)来解析它。您需要使用专门设计的东西,例如HTML Agility Pack
  • 解析器已经到位,所以我现在无法更改整个代码以使用 HTML Agility Pack。
  • 好吧,我建议您进行一些与此代码相关的良好单元测试,并且您可以控制正在解析的 HTML。

标签: c# .net regex


【解决方案1】:

这是因为点默认不匹配新行。您可以使用 [\s\S] 代替:

<span [^>]*class=\"classify\"([\s\S]*?)</span>

或者您可以使用您的原始模式并在 RegexOptions 中设置Singleline option

Regex Tester link

【讨论】:

  • 完美,这个作品。一个快速的问题(因为我的知识在这里非常有限),最好的解决方案是什么,即使用 [\s\S] 或 Singleline 选项?
  • 我不确定,但我猜它们是等价的。 Singleline 的文档说它“改变了点 (.) 的含义,因此它匹配每个字符(而不是除 \n 之外的每个字符)。” [\s\S] 找到一个空白字符或不是空白字符,所以它本质上是做同样的事情。
  • 虽然 [\s\S] 可能更易于移植到其他语言。
  • 好的,再次感谢。我将在这里使用 Singleline。
猜你喜欢
  • 2014-11-18
  • 1970-01-01
  • 2021-07-25
  • 1970-01-01
  • 1970-01-01
  • 2018-07-27
  • 2019-06-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多