我正在尝试从字符串中替换子字符串,如:
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 var11 and this
,这是一个错误。
有任何建议如何实现这一目标?
答案 0 :(得分:4)
删除前导\b
,然后使用\Q...\E
转义序列将输入字符串视为文字:
String a = sample.replaceAll("\\Q" + param +"\\E\\b", "var1");
答案 1 :(得分:1)
单引号不被视为单词边界,因此初始\\b
锚点会阻止文本的其余部分匹配。
此外,您的文字本身包含大量特殊字符,因此quoted应为\\Q
和\\E
。
这是一个解决这些缺点的正则表达式:
"(?<=\\s|^)\\Q'[1]T.1.v - Marriage Statement'!C10\\E(?=\\s|$)"
它将最初的\\b
替换为(?<=\\s|^)
,最后的\\b
替换为(?=\\s|$)
,以允许目标字符串以非字字符开头和结尾,例如作为报价。使用\\Q
和\\E
可以让我们在未转义的目标字符串的其余部分保留特殊字符。
答案 2 :(得分:0)
转义括号和圆点
'\[1\]T\.1\.v - Marriage Statement'!C10
答案 3 :(得分:0)
两件事:
•将\\'
中的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
使用replaceAll
会更好,如果你要替换一些事物的出现,例如字母A. replace
如果它只是一个实例,那么它可以替换它。