【问题标题】:HTML Regular ExpressionHTML 正则表达式
【发布时间】:2014-03-01 20:04:47
【问题描述】:

我的正则表达式有问题。我的数据如下所示:

<tr class="abcData"><td>Text Number One</td><td>text</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
<tr class="abcData"><td>Text Number Two</td><td>text</td><td><span class="value">3</span></td><td><span class="value">3</span></td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
<tr class="abcData"><td>Text Number Three</td><td>text</td><td><span class="value">3.5</span></td><td><span class="value">2</span></td><td><span class="value">3.5</span></td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>

如您所见,第 3-8 个单元格可以包含数字(整数/双精度)、&nbsp 或被 span 包围的数字。

<tr class="abcData"><td>([\s\w]+)</td><td>([\s\w.-]+)</td><td>([\d.\s\w&;]+)</td><td>(\3)</td><td>(\3)</td><td>(\3)</td><td>(\3)</td><td>(\3)</td></tr>

我的正则表达式仅适用于第一个示例(第一个文本),我不知道如何为此编写 OR 语句(我需要相同的 8 组结果)。

我正在http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx 上测试我的正则表达式。

【问题讨论】:

  • 如果您有正则表达式问题。请包括您正在使用的语言/工具。
  • 对不起。我正在derekslager.com/blog/posts/2007/09/… 上测试正则表达式。我用 Java 编程
  • 现在我已经仔细查看了输入。我看到一些随机的&lt;spans&gt; 从这里和那里弹出。我还看到一个冗余表达式[\d.\s\w&amp;;]+\w 包括\d,所以你可以删除\d。如果您采用正则表达式方式,特别是如果您不太擅长它,它会变得复杂。你不应该考虑一个合适的 HTML 解析器吗?
  • @Bugs 这可能是一个有趣的答案,但it's a rant

标签: java regex


【解决方案1】:

不要use regex for HTML,而是使用JSoup 或专门的解析器。我会为此使用perl

$tree->look_down('_tag', 'td', sub { push @text, $_->[0]->as_text; });

...或类似的东西。

【讨论】:

    猜你喜欢
    • 2015-02-27
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 2014-10-01
    • 2011-06-16
    相关资源
    最近更新 更多