2014-11-03 42 views
2

我在使用Java从HTML表中获取信息的程序中遇到了一些问题。 要取出来我每次使用以下正则表达式列的信息:在Java中结合使用正则表达式

<td>([^<]*)</td> 

这对我的工作非常好。 有关读取的链接文本我用这个:

<a[^>]*>(.*?)</a> 

这也是工作的非常非常好。 但有时我需要的信息从列里的某个链接的,所以我想这些正则表达式与结合:

<td>([^<]*)</td>|<a[^>]*>(.*?)</a> 

我认为它会像这样工作:

  • 它让每一个这是<td></td>

  • 之间。如果事情是一个链接,这也让刚刚链接名称事情

但这不起作用。我不是RegEx最好的,所以我需要帮助来结合这两个步骤。

非常感谢。

+4

“我在使用Java从HTML表中获取信息的程序遇到了一些问题。”不要使用正则表达式解析html – Falmarri 2014-11-03 20:01:15

+0

_this是不是working_是什么意思?请给我们你正在使用的代码和一个简短的可重复的例子,清楚地显示你的问题。 – Keppil 2014-11-03 20:02:07

+0

我知道很多人不喜欢用正则表达式解析HTML。但它总是为我工作。而且我知道必须有可能将它结合起来。 – TacoVox 2014-11-03 20:02:15

回答

1

我正在使用的代码:

Pattern pattern = Pattern.compile("<td>([^<]*)</td>|<a[^>]*>(.*?)</a>"); 

String line = "Here are the lines saved from the HTML downloader"; 

Matcher matcher = pattern.matcher(line); 
for (int startPoint = 0; matcher.find(startPoint); startPoint = matcher.end()) 
    { 
     System.out.prinln(matcher.group(1)); 
    } 

这仅仅是一个片段 - 但多数民众赞成它是如何工作的总称。 (通常字符串保存在一个数组中)。

+0

'matcher.group(1)'如果找到链接则返回'null'。 – Keppil 2014-11-03 20:14:43

+0

他们已经合并。要结合到一个捕获组中,Java必须执行_B​​ranch Reset_,这是不行的。在每场比赛中,两组中的一组将是'空',一个不会。你所要做的就是检查哪一个。并且不要将'null'与空字符串混淆。 – sln 2014-11-03 21:24:34

+0

我现在试着与JSoup一起解析所有这些东西,它的工作原理好得多 - 但谢谢你们的帮助! – TacoVox 2014-11-03 21:44:04