2014-09-03 72 views
0

儘管堆棧溢出中發佈了各種問題以解決我的問題,但我找不到完全匹配。因此問這個。使用java替換所有出現的特定模式前面的字符串

我具有圖案如下:

:20: LAIDKZPABCL90165LZJABC 
    :90: LZ,90509LAOABCXL,XKPA;AOLZ 
    :90C: KDOLASABC9080690ABD 
    :90D: ABDBABC906AODIPALKD 
    :90L: AND9011112XXXADABC 
    :90: AKLZPDOAMXNA,;POAS 

在上述字符串我不得不更換所有(或者至少第一)字符串「ABC」到「XYZ」,這是由「開頭的出現:90C :「或」:90D:「。我有以下解決方案,取代第一次出現工作正常。

String data; // Let data be the string as mentioned above 
    Pattern pat = Pattern.compile("(:9(0(C|D)):).*?ABC"); 
    StringBuffer buf = new StringBuffer(data); 
    int endIndex = -1; 
    Matcher matcher = pat.matcher(buf2); 
    System.out.println(buf.toString()); 
    while(matcher.find()){ 
     endIndex = matcher.end(); 
     buf.replace(endIndex-3, endIndex, "XYZ"); 

    } 
    System.out.println(buf.toString()); 

這裏我得到了正確的結果。它用「XYZ」取代第一次出現的「ABC」,前面是90C:或90D :.

是否有任何精確的解決方案來實現這一目標?因爲我不確定數據中ABC的位置,所以我無法使用逆序。如果可能的話,需要解決方案來替換所有的(前面是:90C:或90D:使用正則表達式,我認爲全部替換是不可能的我猜,因爲我們不確定邊界,請幫我解決這個問題。提前

回答

1

你可以試試下面的正則表達式,它使用超前,

(?=:90C:|:90D:)(.*?)ABC(\\S+) 

只是$1XYZ$2更換匹配的字符。

DEMO

+0

其按預期工作。是否有任何方法可以替換所有出現的ABC:90C:或90D: – HJK 2014-09-03 03:50:46

相關問題