句子识别

时间:2011-03-07 22:51:43

标签: java regex

我希望我的Java程序能够学习科学课本等问题,

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

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

是否可以为此目的使用正则表达式?

非常感谢

1 个答案:

答案 0 :(得分:1)

解决方案:
以下是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)

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