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=“(?)?