我正在编写一个程序,它接受一个java文件并检查每一行是否包含一个包含assertEquals的字符串,然后替换属于assertEquals的第二个参数的字符串(即expectedVar和expectedVar2)。
假设这些行是从文件中读取并放在字符串变量上的:
String myString1 = "Assert.assertEquals(outputMessage, expectedVar, actualVar);"
String myString2 = "Assert.assertEquals(/"Hello World, /" + "Hello!", expectedVar2, actualVar);"
我想使用Pattern Library中的单个正则表达式和'group'来替换expectedVar和expectedVar2,或者基本上是assertEquals的第二个参数中的任何字符串。
我想在第一个逗号之后和第二个逗号之前接受任何内容,但myString2也可能包含多个逗号(例如。 /“Hello World,/”+“Hello!”)
我不确定如何处理这个问题。如果您有其他想法,我愿意以不同的方式实施。
先谢谢你
答案 0 :(得分:0)
您需要使用正则表达式原子分组(?>...|...)
>>
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
测试此代码 here 。