2010-12-13 33 views
1

我有一些字母數字字符形式的符號,後跟一個數字。該數字是一年,我需要擴大到兩位數的一年,9成爲09和其它任何一年的1單個Java正則表達式中的條件替換

變得前綴例如:

GCZ0 -> GCZ10 
GCZ1 -> GCZ11 
... 
GCZ8 -> GCZ18 
GCZ9 -> GCZ09 

我與([A-Z]+)([9+])([0-9]+)但我玩不知道如何獲得更換條件包括正確的0或1前綴。

請問正則表達式大師能指點我嗎?由於不幸的原因,我需要在一個Java正則表達式匹配/替換中執行此操作。

感謝, 喬恩

+1

請向我們展示Java代碼,以便我們瞭解「單個Java正則表達式匹配/替換」限制。 – 2010-12-13 14:39:38

+0

完全同意安德魯,我們需要知道更多。 – LaGrandMere 2010-12-13 14:45:44

+0

不幸的是它是供應商產品的一部分。這是一個數據導入,並允許您應用單個正則表達式轉換,從而實現最小化的「自定義」。 – Jon 2010-12-13 14:47:21

回答

0

經過進一步調查,並沒有其他答案在這裏,我斷定這是不可能在一個單一的Java正則表達式。

5

對於不幸的原因,我需要做的這一個單一的Java正則表達式匹配/替換。

似乎令人懷疑,這樣的解決方案存在...傳統的方式是使用Matcher.appendReplacementMatcher.appendTail通過源串進行迭代,發現模式匹配,對它們執行任意邏輯,和替換適當的替換。

在Javascript中,您可以使用a function with String.replace()作爲「智能替換」而不是固定字符串。

+0

+1:比我的建議更好:) – LaGrandMere 2010-12-13 14:46:19

+0

謝謝。我在上面添加了一條評論 - 它是供應商產品的一部分,唯一的API鉤子是該領域的單個正則表達式轉換。所以看起來我可能不得不預先處理所有的文件。 – Jon 2010-12-13 14:49:51

0

編輯:Oups,沒讀過單正則表達式替換條件 ...

好吧,別提什麼我建議......

這裏是匹配正是你所需要的正則表達式:

^[AZ] {3} $ 9

反正有一個替換,我看不出你如何能做到這一點...

我希望有人會比我更好的幫助。

末編輯

使用StringBuffer的,你可以插入一個char:

StringBuffer sb = new StringBuffer(); 
sb.append("GCZ0"); 
if(sb.charAt(3) == '9') sb.insert(2, "0"); 
else sb.insert(2, "1"); 

String result = sb.toString(); 

result,你有你需要合適的字符串。

+0

'StringBuilder',夥計,'StringBuilder' ... – khachik 2010-12-13 15:01:20

+0

@khachik:我不知道Jon是否正在使用Java 5或更高版本,即使他在多線程環境中也不行,所以我總是在這種情況下使用StringBuffer :) – LaGrandMere 2010-12-13 15:13:24