2014-07-18 59 views
0

說我有以下字符串Java的正則表達式的多模式集團更換

String Context = "old1 old2 old3 old4 old5 old6" 

我希望做一個模式:(old2).*(old4)

所以字2將是$1和word4將是$2

是否有任何函數或方法可以同時替換兩個字符串?僅使用組變量($1$2)?

因此,我可以指定$1將變爲new2$2將變爲new4。 我不希望有找到字符串old2old4,並更換到new2new4

+0

使用[java.util.regex中](http://docs.oracle.com/javase /7/docs/api/java/util/regex/Pattern.html)。 –

+0

你能解釋一下你最後一句話的意思嗎「*我不想找到字符串old2和old4並將其替換爲new2和new4 *」?看來你想要完成你在這裏描述的內容,找到'old2'和'old4',並用'new2'和'new4'代替它。 – Pshemo

回答

0

如何簡單replace

"old1 old2 old3 old4 old5 old6".replace("old2", "new2").replace("old4", "new4"); 
當然

原始字符串和替換目標並更換更換可以是變量。

+0

這可能是容易出錯的解決方案。如果OP想要更換old2和old4的地方怎麼辦?第一次用'old4'替換'old2',然後用'old2'替換'old4',你將只用'old2'結束,而不用'old4'。 – Pshemo

+0

是的,雖然這不是一個白癡證明的解決方案,但我覺得對於新手來說,它是一種易於閱讀和理解的解決方案。我不確定OP的Java級別或者他的真實意圖,所以不管它是否適合他是不知道的。 –

4

只有一組所需

如果我的理解,這就是你需要:

String replaced = yourString.replaceAll("old2(.*?)old4", "new2$1new4"); 

說明

  • old2匹配文字字符
  • (.*?)懶洋洋地匹配字符(他們捕捉到第1組),達...
  • old4
  • new2更換,第1組的您可以考慮使用正向前查找內容和new4
1

這裏。

String s = "old1 old2 old3 old4 old5 old6"; 
String r = s.replaceAll("old(?=[24])", "new"); 
System.out.println(r); //=> "old1 new2 old3 new4 old5 old6" 

Lookarounds是零寬度斷言。它們不會消耗字符串中的任何字符。

這將刪除 「舊」 和 「新」 的斷言,要麼(24)如下替換它..

+0

我不確定這是OP真正需要的,但+1因爲它現在回答問題。 – Pshemo

+0

@Pshemo謝謝,是的OP不完全清楚,只是假設。 – hwnd