【问题标题】:Splitting a string and keeping the delimeters within the results拆分字符串并将分隔符保留在结果中
【发布时间】:2012-01-16 10:23:38
【问题描述】:

Reading this question,看来正则表达式是我的问题的解决方案。

这是我要拆分的 HTML:

\n\t\t\t
    <td class=\"stats_name\">
        Damage \n\t\t\t

    <td class=\"stats_value\">
        53 \n\t\t\t

    <td class=\"stats_modifier\">
        (<span class=\"ability_per_level_stat\">+3.2 / per level</span>) \n\t\t\n\t\t  

    </td>

    </td>

    </td>

出于我的原因,我需要将其拆分为 &lt;td 字符串。这与 HtmlAgilityPack 和 String.Split 配合得很好,但是分隔符被删除了,我需要它存在。

var statCells = rowDocument.DocumentNode.InnerHtml.Split(new string[] {"<td"}, StringSplitOptions.RemoveEmptyEntries).ToList();

这是使用正则表达式来保留分隔符的相同“函数”,但是它不能按预期工作并且返回的字符串太多,我认为它分别拆分为“

var statCells = Regex.Split(rowDocument.DocumentNode.InnerHtml, @"(?<=[<td])").ToList();

如何使用 Regex.Split 在"&lt;td" 上进行拆分?

【问题讨论】:

  • 在 td 上拆分是什么意思?这如何不适用于 htmlAgilityPack?如果你这样做:doc.DocumentElement.SelectNodes("td"),你将完美地获得每个 td 节点,包括它们的标记名
  • @Polity:试试吧!它不像您期望的那样工作,因为这些特定的 TD 没有结束元素,并且内容被拉伸以包含所有内容,直到结束。 :)
  • 知道了!所以你毕竟不是试图拆分 html ;)
  • @Polity: 不是任何 正确 格式的 HTML,没有。 :P

标签: c# .net html regex string


【解决方案1】:

@"(?&lt;=[&lt;td])" 在每个 &lt; td 上分裂,因为这就是字符类的工作方式。如果您希望 &lt;td 在下一个字符串的开头(而不是最后一个字符串的结尾),请使用此选项:

@"(?=<td)"

不过,这会比原来的解决方案慢。如果您使用 String.Split 并将每个字符串与 &lt;td 连接起来,那么它应该以相同的方式工作,但速度更快,因为您不使用正则表达式。

【讨论】:

    猜你喜欢
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-08
    • 2016-11-26
    • 2022-11-03
    • 1970-01-01
    相关资源
    最近更新 更多