Java正则表达式replaceAll替换精确值

Java正则表达式replaceAll替换精确值,java,regex,Java,Regex,如标题中所述,以下是示例输入 我会有这样的意见 String str = "test_String test_String#ID\ntest_String#ID test_String"; 然后我用这个代码替换上面的代码 regex = "test_String"; Pattern p = Pattern.compile(regex); Matcher m = p.matcher(Example1); str = m.replaceAll("abc"); 我得到的输出将变成 “abc#ID

如标题中所述,以下是示例输入

我会有这样的意见

String str = "test_String test_String#ID\ntest_String#ID test_String";
然后我用这个代码替换上面的代码

regex = "test_String";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(Example1);
str = m.replaceAll("abc");
我得到的输出将变成 “abc#ID abc”


我想要的输出是“test_String#ID abc”

您可以使用这个基于查找的正则表达式:

regex = "(?m)(?<=\\s|^)test_String(?=\\s|$)";
输出:

String str = "test_String test_String#ID\ntest_String#ID test_String";
String repl = str.replaceAll("(?m)(?<=\\s|^)test_String(?=\\s|$)", "abc");
abc test_String#ID
test_String#ID abc
包com.test

导入java.util.StringTokenizer

公共类堆栈溢出{

public static void main(String[] args) {
    //String Example1 = "testString#ID testString";
    //String Example2 = "testString testString#ID";
    String Example3 = "test_String test_String#ID\ntest_String#ID test_String";
    String regex = "test_String";
    String replaceWIth = "abc";
    String delimiter = " ";
    StringTokenizer tokens  = new StringTokenizer(Example3, delimiter, true);
    // if you want fix the buffer size by 
    // ((Example1.length()/regex.length()) * replaceWIth.length()) + (Example1.length()%regex.length())
    StringBuffer buffer = new StringBuffer();
    while (tokens.hasMoreTokens()) {
        String t = tokens.nextToken(); 
        if (t.equals(regex)) {
            buffer.append(replaceWIth);
        } else {
            buffer.append(t);
        }
    }
    System.out.println(buffer.toString());
}

}

您是想跳过正则表达式匹配的第一个实例,还是想跳过其他一些条件?不要只跳过第一个实例,因为模式的出现可能是先出现的,也可能是后出现的。因此,我需要过滤器精确匹配,然后只执行replaceHi anubhava我更新了样本输入,在更新的场景中,ur代码不起作用……
“test_String test_String ID\ntest_String ID test_String”
有两行输入。每行的预期输出是什么?abc测试字符串#ID测试字符串#ID abcextra问题,如果我想替换此“测试字符串#ID”正则表达式未找到任何匹配项…您需要澄清当
test\u String
应该被替换时的逻辑,以及当它不应该在一行中被替换时的逻辑。请在java中共享,而不是Javascript。请尝试以下输入,逻辑应该能够处理这些场景以及String str=“测试字符串#ID测试字符串\n测试字符串测试字符串#ID”;
public static void main(String[] args) {
    //String Example1 = "testString#ID testString";
    //String Example2 = "testString testString#ID";
    String Example3 = "test_String test_String#ID\ntest_String#ID test_String";
    String regex = "test_String";
    String replaceWIth = "abc";
    String delimiter = " ";
    StringTokenizer tokens  = new StringTokenizer(Example3, delimiter, true);
    // if you want fix the buffer size by 
    // ((Example1.length()/regex.length()) * replaceWIth.length()) + (Example1.length()%regex.length())
    StringBuffer buffer = new StringBuffer();
    while (tokens.hasMoreTokens()) {
        String t = tokens.nextToken(); 
        if (t.equals(regex)) {
            buffer.append(replaceWIth);
        } else {
            buffer.append(t);
        }
    }
    System.out.println(buffer.toString());
}