如何使用RegEx从以下数据中提取数据?

时间:2010-10-22 19:45:46

标签: java regex

我有以下模式的数据集

1<a href="/contact/">Joe</a><br />joe.doe@somemail.com</div>
2<a href="/contact/">Tom</a><br />tom.cat@aol.com</div>
3<a href="/contact/">Jerry</a><br />jerry.mouse@yahoo.co.in</div>

所以......

我需要从中提取名称和电子邮件ID。我该怎么做?


更新

根据您的回复,我已将数据格式更改为:

1(name)Joe(email)joe.doe@somemail.com(end)
2(name)Tom(email)tom.cat@aol.com(end)
3(name)Jerry(email)jerry.mouse@yahoo.co.in(end)

如何解析

3 个答案:

答案 0 :(得分:1)

Don't use regular expressions to parse HTML

使用HTML解析器。 this page上列出了一堆。根据我使用Tidy的经验,我建议JTidy。从他们的页面:

  

JTidy是HTML Tidy的Java端口,HTML语法检查程序和漂亮的打印机。与其非Java表兄一样,JTidy可以用作工具来清理格式错误和错误的HTML 。此外,JTidy为正在处理的文档提供了一个DOM接口,有效地使您能够将JTidy用作真实HTML的DOM解析器。

<强>更新

根据对问题的修改,使用split()将字符串与\([a-z]+\)分隔为分隔符。这应该为您提供单独的组件:

String[] components = str.split("\\([a-z]+\\)");

或者您可以使用更通用的表达式\(.*?\)

答案 1 :(得分:1)

使用此正则表达式:

\(name\)(.*)\(email\)(.*)\(end\)

现在,第一个反向引用\1包含名称,第二个反向引用\2包含电子邮件地址。

继续使用相同的正则表达式获取下一个名称和电子邮件地址。

答案 2 :(得分:1)

如果您确信这将是所有条目的标准模式,则可以使用正则表达式(。*?)作为拆分模式,在每一行上使用String.split()。这将匹配(后跟其他字符的最少可能的数字,然后是另一个字符)。所以代码看起来像这样:

//for each String line
String[] items = line.split("\\(.*?\\)");
name = items[0];
email = items[1];