0

我正在解析一些事务,例如 3 个事务如下所示:

<TR class=DefGVRow>
<TD>29/04/2013</TD>
<TD><A href="javascript:__doPostBack('ctl00$cp$GVMov','Deposito$29/04/2013|0140959158|+|0,00')">DEPOSITO 0140959158</A></TD>
<TD>0140959158</TD>
<TD align=right>336,00</TD>
<TD align=center>+</TD>
<TD align=right>16.210,60</TD></TR>H
<TR class=DefGVAltRow>
<TD>29/04/2013</TD>
<TD>RETIRO ATM CTA/CTE</TD>
<TD>1171029739</TD>
<TD align=right>600,00</TD>
<TD align=center>-</TD>
<TD align=right>15.610,60</TD></TR>
<TR class=DefGVRow>
<TD>29/04/2013</TD>
<TD>C.SERV.CAJERO AUT.</TD>
<TD>1171029739</TD>
<TD align=right>3,25</TD>
<TD align=center>-</TD>
<TD align=right>15.607,35</TD></TR>

我目前的正则表达式是:

<TR class=\w+>
<TD>(?<day>\d{1,2})/(?<month>\d{1,2})/(?<year>\d{4})</TD>
<TD>(?<description>.+?)</TD>
<TD>(?<id>\d{3,30})</TD>
<TD.+?>(?<amount>[\d\.]{1,20},\d{1,10})</TD>
<TD.+?>(?<info>.+?)</TD>
<TD.+?>(?<balance>[\d\.]{1,20},\d{1,10})</TD></TR>

我该如何编辑

<TD>(?<description>.+?)</TD>

处理与同一提取的其他部分匹配的可选标签?(基本上:抓组时如何忽略A标签)

谢谢!

4

2 回答 2

2

这是一个非常普遍的问题。请检查这个史诗般的答案并停止使用正则表达式来“解析”html,而是使用适当的解析器并通过 XPath 甚至 CSS 选择器获得所需的内容。

于 2013-05-01T02:07:21.873 回答
2

这将删除“可选”链接:

<TR class=\w+>
<TD>(?<day>\d{1,2})/(?<month>\d{1,2})/(?<year>\d{4})</TD>
<TD>(?:<A href=".*>)?(?<description>.+?)(?:</A>)?</TD>
<TD>(?<id>\d{3,30})</TD>
<TD.+?>(?<amount>[\d\.]{1,20},\d{1,10})</TD>
<TD.+?>(?<info>.+?)</TD>
<TD.+?>(?<balance>[\d\.]{1,20},\d{1,10})</TD></TR>
于 2013-05-01T02:14:13.507 回答