2016-02-17 94 views
1

我試圖在我的解決方案中「美化」某種類型的數字對象。這種特定類型的具有以下可能的表示,與它們相當的表示沿着:正則表達式::複數替換

xxxxxyyyyyyy => xxxxx-yyyyyyy 
xxxxxyyyyyyyz => xxxxx-yyyyyyy-z 

基本上,類型由5位表示FieldA,7個位數表示FieldB和可選的數字表示一個CheckDigit。使用下面的正則表達式/替換模式:

Regex:  ^(?<FIELDA>\d{5})(?<FIELDB>\d{7})(?<CHECKDIGIT>\d?)$ 
Replacement: ${FIELDA}-${FIELDB}-${CHECKDIGIT} 

...結果:

xxxxxyyyyyyy => xxxxx-yyyyyyy- (wrong) 
xxxxxyyyyyyyz => xxxxx-yyyyyyy-z (correct) 

是否有可能修正僅使用正則表達式的第一表示/替換對? 我可以通過使用兩個不同的正則表達式來完成這項工作,但我想要一個更優雅的解決方案。一個使用單個正則表達式/替換對。

PS。我正在使用Java 1.7。

+0

最快的方法 - >應該是'^(( \ d {5}?) ? \ d {7})(? \ d)?$'然後在一個回叫檢查組3是否匹配。否則,如果Java支持'\ G'構造,則嘗試單獨替換。 – sln

+0

即時通訊不知道我完全按照..謹慎闡述更多的隊友? – AweSIM

回答

0

我不認爲這是可能的工具在一個單一的正則表達式。您可以按照以下方式使用兩個RegEx。

首先,用-之間的數字替換。

搜索:^(\d{5})(\d{7})(\d+)?$

替換:$1-$2-$3

First Replacement

然後,取出後衝刺。

搜索:^(\d{5})-(\d{7})-$

替換:$1-$2

Second Replacement

End Result

+0

是的,這也是一個可能的解決方案..但是,即時通訊有興趣知道是否有解決方案,只涉及單對正則表達式/替換字符串.. = / – AweSIM