【发布时间】:2012-09-22 22:02:24
【问题描述】:
<tr><td align=right>Name:</td><td align=left><b><font color=black>Nathan</font></b></td></tr>
<tr><td align=right>Extension:</td><td align=left><b>222</b></td></tr>
我有上面的 HTML 文本(无法更改),我想要一个返回 3 个捕获组的正则表达式,标签 (Name|Extension) 字体颜色 (black|red)和数据(\w+)。
我在返回捕获组 2(字体颜色)时遇到了一些问题。如您所见,它不在表格的“扩展”行中,因此我将捕获组设为可选。当我这样做时,第一行根本不匹配。我尝试了很多不同的量词组合的试验和错误,但我仍然无法得到我正在寻找的结果。
这是我目前的模式:(Name|Extension):.*?(?:<font color=(black|red)>)?.*?>(\w+)
我相信.*? 正在消耗可选的捕获组,并且仅匹配第 1 组和第 3 组。如果有人可以向我解释我哪里出错了,那就太好了。
编辑:作为一个想要了解更多关于正则表达式的人,如果人们可以将我上面的数据解释为不可变文本而不是 HTML,我将不胜感激。
【问题讨论】:
-
不要使用正则表达式来检查 HTML。使用像 jsoup 这样的 HTML 解析器
-
@LuiggiMendoza 谢谢,很好的链接,但不幸的是我对应用程序没有创造性的控制,我无法添加新的依赖项。
-
一定有办法使用jsoup或其他解析器。最后要做的事情可能是创建自己的解析器,但请相信我:如果你用正则表达式来做这件事,那将是一个地狱。
-
@LuiggiMendoza 我理解你的情绪,但不幸的是这不是我能控制的。让我们假设我只是尝试使用正则表达式来完成这个。我已经删除了 java 标签,希望这能让事情更清楚。
-
这不是一种情绪,它表明您应该使用解析器而不是正则表达式:Parsing Html The Cthulhu Way。如果您仍然在寻找如何使用正则表达式来做到这一点,我祝您好运和喝咖啡。