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());
}