java - 句子识别

标签 java regex

我希望我的 Java 程序能够回答科学教科书上的问题,例如,

如果骑车人的平均速度为 11.5 公里/小时,他在 4 小时内可以行驶多远?

作为字符串,然后我希望程序能够识别问题中提到的每个数字和单位,例如在上面的示例中,它将是 4.0 小时和 11.5 公里/小时。

是否可以使用正则表达式来实现此目的?

非常感谢

最佳答案

解决方案:
下面是一个 Java 示例代码,可以满足您的需求:


import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Regexp {
    public static void main(String[] args) {
        String units = "h|km/h";// Add more units separated by pipes here
        String test = "How far can a cyclist travel in 4.0 h if his average speed is 11.5 km/h?";

        Pattern p = Pattern.compile("\\d+(?:\\.\\d+)?\\s*(?:" + Matcher.quoteReplacement(units) + ")",Pattern.CASE_INSENSITIVE);
        Matcher m = p.matcher(test);

        System.out.println("Numbers and units recognized: ");
        while(m.find()) {
            System.out.println(m.group());
        }
    }
}


它将输出:

Numbers and units recognized: 
4.0 h
11.5 km/h


详细信息:
我假设数字具有以下形式:
一个或多个数字(0-9),可选后跟一个点和一个或多个数字(0-9)

您可以根据需要在管道分隔列表units变量中添加更多单位

关于java - 句子识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5226248/

相关文章:

java - Tomcat 5 : Getting juli exception during tomcat load

java - 当对象是在不同的类中创建时,如何通过 ObjectOutputStream 写入对象?

c# - 用于在匹配引号之间选择数据的正则表达式模式

c++ - 在 C++ 中使用 regex/boost 查找两个数字之间的数字

通过策略模式处理 Java 异常?

java - HtmlUnit 单击具有相同名称的链接引用中的特定链接

java - 类中定义的枚举是静态嵌套类吗?

r - (在 R 中)如何在保留缩写的情况下将 "WeLiveInCA"之类的字符串中的单词按标题大小写拆分为 "We Live In CA"?

java - 如何使用 Replace 方法替换数字前的空格?

php - 正则表达式替换冒号和分号之间的冒号