我有以下文字,我想从中提取所有<td ????>???</td>
代码
<tr id=row509>
<td id=serv509 align=center class='style1'>Z Deviazione Tecnico Home verso S24 [ NON USATO ]</td>
<td align=center class='style4'>23</td>
<td align=center class='style10'>22</td>
<td align=center class='style6'>0</td>
<td align=center class='style2'>0</td>
<td id=rowtot509 align=center class='style6'>0</td>
<td align=center class='style6'>0</td>
<td align=center class='style2'>0</td>
<td align=center class='style6'>0</td>
</tr>
预期结果将是:
1. <td id=serv509 align=center class='style1'>Z Deviazione Tecnico Home verso S24 [ NON USATO ]</td>
2. <td align=center class='style4'>23</td>
3. <td align=center class='style10'>22</td>
[..]
有任何帮助吗?感谢
答案 0 :(得分:2)
使用HTML或XML库有什么问题?
例如,使用XML和XPath,这只是以xml / td
为例,无论库API支持哪种方式。
正则表达式是一种糟糕的方式,因为XML不是常规语言。具体来说,您可以将标记嵌套在其他标记内,这是无法用正则表达式表示的内容。
因此,虽然为简单情况(<td.*?</td>
)创建正则表达式很容易,但如果XML稍微改变,它很容易破坏。
假设XML已损坏,但您可以使用Regex 修复它。 :-)例如,如果用(\w+)=(\w+)
(或$1='$2'
替换其中的模式\1='\2'
,如果这是c#替换模式的语法,那么您将获得有效的XML。
答案 1 :(得分:0)
我同意丹尼尔,但是如果你真的必须使用正则表达式 - 请自己获取RegexBuddy的副本,这样你就可以快速调试你的表达。我花了很长时间才花了40美元。
答案 2 :(得分:0)
正则表达式是一种非常脆弱的工具,可用于此类问题,特别是如果表格的单元格内容可能是另一个表格存在任何风险。 (在这种情况下,您在</td>
开始标记之后找到的第一个<td>
标记实际上可能不会关闭该元素,而是关闭后代元素。)
解决类似问题的一种更强大的方法是将HTML解析为DOM,然后检查DOM。 HTML Agility Pack是人们似乎喜欢的。