Regex помогите. Извлечь номер из строки после косой черты - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть путь к файлу, который выглядит следующим образом:

"lab_4_input_files/asc50.dat"
"lab_4_input_files/asc500.dat"
"lab_4_input_files/asc500-1.dat"

, и я хочу извлечь 50, 500, 499. Есть ли способ сделать это с помощью regex и logi c?

В настоящее время моим регулярным выражением является fileName.replaceAll("\\D+",""), но оно возвращает мне:

450
4500
45001

4 из имени папки не может быть в конечном результате, и необходимо вычислить 500-1. Что я могу сделать?

1 Ответ

0 голосов
/ 30 апреля 2020

Regex не может на самом деле выполнять математические выражения. Однако JavaScript может! И в JDK встроен JavaScript движок.

Хотя это немного хакер, это даст вам желаемый результат. Обратите внимание, что инициализация всего механизма JavaScript потребует значительных ресурсов, но это значительно облегчит выполнение математического выражения String.

    ScriptEngineManager engineManager = new ScriptEngineManager();
    ScriptEngine engine = engineManager.getEngineByName("JavaScript");

    // Regex to match any character you'd typically find in a simple mathematical expression after "asc"
    String regex = "(?<=asc)[0-9+\\-\\*\\\\\\(\\) ]+";

    // Your input data
    String line = "lab_4_input_files/asc500-1.dat";

    Matcher matcher = Pattern.compile(regex).matcher(line);
    if (matcher.find()) {
        String expression = matcher.group();
        try {
            int extractedNumber = (Integer) engine.eval(expression);
            System.out.println(extractedNumber);
        } catch (ScriptException exception) {
            // Handle invalid expression
        }
    } else {
        // Handle no regex match
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...