这是您正在寻找的暴行:
(Name|Extension).*?<b>[<font color=]{0,12}(black|red)?>?(.*?)</.*
它非常脆弱,如果您处理的 HTML 格式与您提供的示例略有不同,我绝对不会期望它能够工作。不过,如果那个 HTML 确实很糟糕,我认为你应该没问题。
请注意,这不能被视为 Signor Mendoza 在使用正则表达式解析 HTML 的固有不可能性方面是错误的证据;恰恰相反,这证明他在每一个细节上都是绝对正确的。这不是解析;这是作弊,就像我说的那样,如果您正在使用的源 HTML 与您提供的示例一样丑陋,您只会侥幸逃脱。
测试用例:
<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>
<tr><td align=right>Name:</td><td align=left><b><font color=red>Thomas</font></b></td></tr>
<tr><td align=right>Extension:</td><td align=left><b>223</b></td></tr>
<tr><td align=right>Name:</td><td align=left><b><font color=black>Frank</font></b></td></tr>
<tr><td align=right>Extension:</td><td align=left><b>224</b></td></tr>
<tr><td align=right>Name:</td><td align=left><b><font color=red>Steve</font></b></td></tr>
<tr><td align=right>Extension:</td><td align=left><b>225</b></td></tr>
<tr><td align=right>Name:</td><td align=left><b><font color=black>Tony</font></b></td></tr>
<tr><td align=right>Extension:</td><td align=left><b>226</b></td></tr>
结果:
Name black Nathan
Extension 222
Name red Thomas
Extension 223
Name black Frank
Extension 224
Name red Steve
Extension 225
Name black Tony
Extension 226