Java 如何使用正则表达式从以下数据中提取数据?

Java 如何使用正则表达式从以下数据中提取数据?,java,regex,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>

我有一个如下模式的数据集

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>
如何解析它?

使用HTML解析器。上面有一堆。根据我的使用经验,我建议。从他们的页面:

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

更新

根据对问题的编辑,使用将字符串拆分为
\([a-z]+\)
作为分隔符。这将为您提供单独的组件:

String[] components = str.split("\\([a-z]+\\)");
或者您可以使用更通用的表达式
\(.*?\)

使用HTML解析器。上面有一堆。根据我的使用经验,我建议。从他们的页面:

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

更新

根据对问题的编辑,使用将字符串拆分为
\([a-z]+\)
作为分隔符。这将为您提供单独的组件:

String[] components = str.split("\\([a-z]+\\)");
或者您可以使用更通用的表达式
\(.*?\)

使用以下正则表达式:

\(name\)(.*)\(email\)(.*)\(end\)
现在,第一个backreference
\1
包含名称,第二个backreference
\2
包含电子邮件地址

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

使用此正则表达式:

\(name\)(.*)\(email\)(.*)\(end\)
现在,第一个backreference
\1
包含名称,第二个backreference
\2
包含电子邮件地址


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

如果您保证这将是所有条目的标准模式,您只需在每一行上使用String.split(),使用正则表达式(.*)作为拆分模式。这将匹配(后跟尽可能少的其他字符数,后跟另一个字符)。因此,代码如下所示:

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

如果保证这将是所有条目的标准模式,则可以在每一行上使用String.split(),使用正则表达式(.*)作为拆分模式。这将匹配(后跟尽可能少的其他字符数,后跟另一个字符)。因此,代码如下所示:

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

这不再是一个格式良好的HTML文档。@ragunah。如果它不是一个格式良好的文档,您仍然可以通过Tidy运行它来整理它,然后解析它。好的,如果上面的数据集看起来像1(abc)Joe(def)Joe,您会怎么做。doe@somemail.com(xyz)暂时忘记HTML。您可以使用
\\([a-z]+\\)
作为分隔符来标记它(对于您提供的确切示例)。这不再是一个格式良好的HTML文档。@ragunah。如果它不是一个格式良好的文档,您仍然可以通过Tidy运行它来整理它,然后解析它。好的,如果上面的数据集看起来像1(abc)Joe(def)Joe,您会怎么做。doe@somemail.com(xyz)暂时忘记HTML。您可以使用
\\([a-z]+\\)
作为分隔符来标记它(对于您提供的确切示例).我在找这个。谢谢@ChetanI在找这个。谢谢@Chetan