Признание приговора - PullRequest
0 голосов
/ 08 марта 2011

Я бы хотел, чтобы моя программа на Java отвечала на вопросы из учебников по естественным наукам, например,

Как далеко велосипедист может проехать 4,0 ч, если его средняя скорость составляет 11,5 км / ч?

в виде строки, и тогда я бы хотел, чтобы программа распознала все числа и единицы, упомянутые в вопросе, например, в приведенном выше примере это будет 4,0 ч и 11,5 км / ч.

Можно ли использовать регулярные выражения для этой цели?

Большое спасибо

1 Ответ

1 голос
/ 25 марта 2011

Решение:
Вот пример кода в 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)

Вы можете добавить больше единиц по мере необходимости в списке разделенных труб единиц переменная

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...