簡體   English   中英

Java中的RegEx替換字符串

[英]RegEx in java to replace a String

我一直在嘗試將此數學函數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 );
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM