0

Java ファイルを取り込み、各行で assertEquals を含む文字列をチェックし、assertEquals の 2 番目の引数 (expectedVar と expectedVar2) に属する文字列を置き換えるプログラムを作成しています。

これらの行がファイルから読み取られ、文字列変数に配置されているとします。

String myString1 = "Assert.assertEquals(outputMessage, expectedVar, actualVar);" 

String myString2 = "Assert.assertEquals(/"Hello World, /" + "Hello!", expectedVar2, actualVar);" 

パターン ライブラリの 1 つの正規表現を「group」と共に使用して、expectedVar と expectedVar2、または基本的に assertEquals の 2 番目の引数にある任意の文字列を置き換えたいと思います。

最初のコンマの後と 2 番目のコンマの前に何かを取り込むことを考えていましたが、myString2 には複数のコンマを含めることもできます (例: /"Hello World, /" + "Hello!" )。

これにアプローチする方法がわかりません。別のアイデアがあれば、これを別の方法で実装したいと思います。

よろしくお願いします

4

1 に答える 1

0

正規表現のアトミック グループを使用する必要があります(?>...|...)>>

Java コード:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

class Main
{
  public static void main (String[] args) throws java.lang.Exception
  {
    String text = "Assert.assertEquals(/\"Hello World, /\" + \"Hello!\", expectedVar2, actualVar)";
    String pattern = "Assert\\.assertEquals\\((?>(?:[^,]*\"(?:[^,]*,)+[^,]*\")+|[^,]+),\\s*([^,]+)";
    Pattern r = Pattern.compile(pattern);
    Matcher m = r.matcher(text);
    if (m.find()) {
      System.out.println("MATCH FOUND: " + m.group(1));
    } else {
      System.out.println("NO MATCH");
    }
  }
}

出力:

MATCH FOUND: expectedVar2

このコードをここでテストします。

于 2012-10-18T12:29:58.823 に答える