簡體   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