我有以下模式的数据集
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)
如何解析 ?
答案 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];