2016-09-15 117 views
0

的子只是想知道如果有一個更好的解決方案,這給一個字符串,如替換字符串中所有的正則表達式匹配與匹配

xDLMContent <matches> something <and> dSecurityGroup <contains> somethingelse <and> xDLMSomeOtherMetaDataField <matches> anothersomethingelse 

它需要與

DLMContent <matches> something <and> SecurityGroup <contains> somethingelse <and> DLMSomeOtherMetaDataField <matches> anothersomethingelse 

規則是元數據被替換字段以x或d開頭​​,接着是大寫字母,然後是一個或多個混合大小寫字母字符。

這裏是我的解決辦法,但我不知道是否有更好的東西

public static void main(String[] args) { 
    String s = "xDLMContent <matches> something <and> dSecurityGroup <contains> somethingelse <and> xDLMSomeOtherMetaDataField <matches> anothersomethingelse"; 
    Pattern pattern = Pattern.compile("[dx][A-Z][a-zA-Z]+"); 
    Matcher matcher = pattern.match(s); 
    while (matcher.find()) { 
     String orig = s.substring(matcher.start(), matcher.end()); 
     String rep = s.substring(matcher.start() + 1, matcher.end()); 
     s = s.replaceAll(orig, rep); 
     matcher = pattern.match(s); 
    } 

    System.out.println(s); 
} 
+0

http://stackoverflow.com/questions/632204/java-string-更換replace-using-regular-expressions – Andreas

回答

3

使用replaceAll()效果很好。只需選擇您想要保留(括號()部分)內容,並通過使用$1

String f = s.replaceAll("[dx]([A-Z][a-zA-Z]+)", "$1"); 

輸出

DLMContent <matches> something <and> SecurityGroup <contains> somethingelse <and> DLMSomeOtherMetaDataField <matches> anothersomethingelse 
+2

不錯!我不知道這個組的'$ 1'欺騙 – PDStat

+0

你知道是否有可能對這個組進行一些轉換,如下所示:'replaceAll(「[dx]([AZ] [a-zA-Z] +)「,someMethod(」$ 1「))'? (顯然,這段代碼不起作用 - 也許還有其他一些技巧) –