gpt4 book ai didi

java - Java中的RegEx替换字符串

转载 作者:行者123 更新时间:2023-11-29 09:30:34 26 4
gpt4 key购买 nike

我一直在尝试将这个数学函数 x^2*sqrt(x^3) 替换为这个 pow(x,2)*Math.sqrt(pow(x, 3))

所以这是正则表达式

/([0-9a-zA-Z\.\(\)]*)^([0-9a-zA-Z\.\(\)]*)/ pow(\1,\2)

它在 ruby​​ 中有效,但我找不到在 java 中执行的方法,我试过这个方法

String function=  "x^2*sqrt(x^3)";

Pattern p = Pattern.compile("([a-z0-9]*)^([a-z0-9]*)");
Matcher m = p.matcher(function);

String out = function;

if(m.find())
{
System.out.println("GRUPO 0:" + m.group(0));
System.out.println("GRUPO 1:" + m.group(1));
out = m.replaceFirst("pow(" + m.group(0) + ", " + m.group(1) + ')');
}
String funcformat = out;
funcformat = funcformat.replaceAll("sqrt\\(([^)]*)\\)", "Math.sqrt($1)");

System.out.println("Return Value :"+ funcion );
System.out.print("Return Value :"+ funcformat );

但还是不行,输出是:pow(x, )^2*Math.sqrt(x^3) 正如我之前所说,它应该是 pow(x ,2)*Math.sqrt(pow(x,3))。谢谢!!

最佳答案

正如其他人评论的那样,正则表达式不是可行的方法。您应该使用解析器。但是如果你想要一些快速而肮脏的东西:

来自 Matcher :

Capturing groups are indexed from left to right, starting at one. 
Group zero denotes the entire pattern, so the expression m.group(0)
is equivalent to m.group().

所以你需要使用m.group(1)m.group(2)。并在您的正则表达式中转义插入符号 ^

import java.util.regex.*;

public class Replace {
public static void main(String[] args) {
String function= "x^2*sqrt(3x)";
Pattern p = Pattern.compile("([a-z0-9]*)\\^([0-9]*)");
Matcher m = p.matcher(function);
String out = function;

if (m.find()) {
System.out.println("GRUPO 0:" + m.group(1));
System.out.println("GRUPO 1:" + m.group(2));
out = m.replaceFirst("pow(" + m.group(1) + ", " + m.group(2) + ')');
}
String funcformat = out;
funcformat = funcformat.replaceAll("sqrt\\(([a-z0-9]*)\\^([0-9]*)]*\\)", "Math.sqrt(pow($1, $2))");
System.out.println("Return Value :"+ function );
System.out.print("Return Value :"+ funcformat );
}
}

关于java - Java中的RegEx替换字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16597331/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com