使用 Java 从 Wolfram Alpha 检索到的结果中提取所需的子字符串
Extracting required substring from a result retrieved from Wolfram Alpha with Java
我正在开发一个 Java 程序,它接受用户的问题,将其发送到 Wolfram Alpha API,然后清理结果并打印出来。
如果用户提出问题"Who is the President of the USA?",结果如下
Response: <section><title>Input interpretation</title> <sectioncontents>United States | President</sectioncontents></section><section><title>Result</title><sectioncontents>Barack Obama (from 20/01/2009 to present)</sectioncontents></section><section><title>Basic information</title><sectioncontents>official position | President (44th)..........etc
我想提取"Barack Obama (from 20/01/2009 to present)"
我已经能够使用以下代码 trim 达到 Barack:
String clean =response.substring(response.indexOf("Result") + 31 , response.length());
System.out.println("Response: " + clean);
我会如何 trim 剩下的结果?
响应本质上是 XML。
正如在许多编程论坛中不断讨论的那样,正则表达式不适合解析 XML - 您应该使用 XML 解析器。
好吧,如果有帮助的话,我想出了这个正则表达式:
Result.+?>([^<]+?)<
找到 "Result" 后,它会捕获 > 和 < 的第一个实例,它们之间至少有一个字符。
更新
下面是一些可能有用的示例代码:
String response = "Response: <section><title>..."
Pattern pattern = Pattern.compile("Result.+?>([^<]+?)<");
Matcher match = pattern.matcher(response);
String clean = "";
if (match.find())
clean = match.group(1);
System.out.println(clean);
我正在开发一个 Java 程序,它接受用户的问题,将其发送到 Wolfram Alpha API,然后清理结果并打印出来。
如果用户提出问题"Who is the President of the USA?",结果如下
Response: <section><title>Input interpretation</title> <sectioncontents>United States | President</sectioncontents></section><section><title>Result</title><sectioncontents>Barack Obama (from 20/01/2009 to present)</sectioncontents></section><section><title>Basic information</title><sectioncontents>official position | President (44th)..........etc
我想提取"Barack Obama (from 20/01/2009 to present)"
我已经能够使用以下代码 trim 达到 Barack:
String clean =response.substring(response.indexOf("Result") + 31 , response.length());
System.out.println("Response: " + clean);
我会如何 trim 剩下的结果?
响应本质上是 XML。
正如在许多编程论坛中不断讨论的那样,正则表达式不适合解析 XML - 您应该使用 XML 解析器。
好吧,如果有帮助的话,我想出了这个正则表达式:
Result.+?>([^<]+?)<
找到 "Result" 后,它会捕获 > 和 < 的第一个实例,它们之间至少有一个字符。
更新 下面是一些可能有用的示例代码:
String response = "Response: <section><title>..."
Pattern pattern = Pattern.compile("Result.+?>([^<]+?)<");
Matcher match = pattern.matcher(response);
String clean = "";
if (match.find())
clean = match.group(1);
System.out.println(clean);