繁体   English   中英

用特殊字符代替确切的字符串,而不是其他子字符串的一部分

[英]Replace exact string with special characters and not the part of another substring

我正在尝试从类似的字符串中替换子字符串:

Sample string value '[1]T.1.v - Marriage Statement'!C10 and this

替换为'[1]T.1.v - Marriage Statement'!C10的文本,并加上其他字符串,例如var1以便该字符串成为Sample string value var1 and this 问题是可能存在一些字符串,例如Sample string value '[1]T.1.v - Marriage Statement'!C101 and this在此替换不起作用。 我正在探索边界正则表达式一词来限制替换:

String sample = "Value can be '[1]T.1.v - Marriage Statement'!C10 and this";
String a = sample.replaceAll("\\b'[1]T.1.v - Marriage Statement'!C10\\b", "var1");
System.out.println(a);

但这似乎并不能完全取代这个词。 我尝试了简单的字符串替换,但是它将替换Sample string value '[1]T.1.v - Marriage Statement'!C101 and this的子字符串, Sample string value '[1]T.1.v - Marriage Statement'!C101 and this同时将输出作为Sample string value var11 and this是一个错误。

有什么建议可以实现吗?

删除前导\\b然后使用\\Q...\\E转义序列将输入字符串视为文字:

String a = sample.replaceAll("\\Q" + param +"\\E\\b", "var1");

单引号被视为单词边界,因此初始\\\\b锚会阻止其余文本匹配。

此外,您的文本本身具有大量特殊字符,因此应使用\\\\Q\\\\E 引用

这是一个正则表达式,可以解决这些缺点:

"(?<=\\s|^)\\Q'[1]T.1.v - Marriage Statement'!C10\\E(?=\\s|$)"

它将初始\\\\b替换为(?<=\\\\s|^) ,最后将\\\\b替换为(?=\\\\s|$)以允许目标字符串以非单词字符开头和结尾,例如引号。 使用\\\\Q\\\\E可使我们在目标字符串的其余部分中保留特殊字符而不会转义。

演示

转义括号和点

'\[1\]T\.1\.v - Marriage Statement'!C10

两件事情:

•将您的replaceAll \\\\'更改为\\'

•将replaceAll(...更改为replace(... (请参阅文章底部)

它看起来应该像这样:

public static void main(String[]args) {
    String sample = "Value can be '[1]T.1.v - Marriage Statement'!C10 and this";
    String a = sample.replace("\'[1]T.1.v - Marriage Statement\'!C10", "var1");
    System.out.println(a);
}

产生输出:

Value can be var1 and this

如果要替换一堆出现的东西(例如字母A),则使用replaceAll会更好。如果只是替换一个实例,那么replace会很好地替换某些东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM