Java 正则表达式帮助。在正斜杠后从字符串中提取数字

Java 正则表达式帮助。在正斜杠后从字符串中提取数字,java,regex,Java,Regex,我的文件路径如下所示: "lab_4_input_files/asc50.dat" "lab_4_input_files/asc500.dat" "lab_4_input_files/asc500-1.dat" 我想提取50500499。有没有办法用正则表达式和逻辑来实现这一点 当前我的正则表达式是fileName.replaceAll(“\\D+”,”),但它返回我: 450 4500 45001 文件夹名称中的4不能在最终结果中,需要计算500-1。我能做什么?正则表达式实际上不能执行数

我的文件路径如下所示:

"lab_4_input_files/asc50.dat"
"lab_4_input_files/asc500.dat"
"lab_4_input_files/asc500-1.dat"
我想提取50500499。有没有办法用正则表达式和逻辑来实现这一点

当前我的正则表达式是
fileName.replaceAll(“\\D+”,”)
,但它返回我:

450
4500
45001

文件夹名称中的4不能在最终结果中,需要计算500-1。我能做什么?

正则表达式实际上不能执行数学表达式。但是JavaScript可以!JDK中内置了一个JavaScript引擎

虽然这是一个有点黑客,这将得到你想要的结果。请注意,初始化整个JavaScript引擎将占用大量资源,但这将使执行字符串数学表达式变得更加容易

    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
    }
ScriptEngineManager engineManager=新的ScriptEngineManager();
ScriptEngine=engineManager.getEngineByName(“JavaScript”);
//正则表达式,以匹配通常在“asc”之后的简单数学表达式中找到的任何字符
字符串regex=“(?)?