2010-12-13 21 views
1

英数字の形式でいくつかの記号があり、その後に1桁が続きます。桁が年であると私は9が09になると、他の年は、例えば1条件付きの単一のJava正規表現で置き換えます

接頭辞になると、2桁の年に展開する必要があります:私は([A-Z]+)([9+])([0-9]+)が、私と一緒に遊んでい

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

を右の0または1接頭辞を条件付きで含める方法を教えてください。

正規表現のマスターが正しい方向に私を指すことができますか?不幸な理由から、私はこれを単一のJava正規表現マッチ/置換で行う必要があります。

おかげで、不幸な理由から ジョン

+1

「Javaの正規表現の一致/置き換え」の制限を理解できるように、Javaコードを表示してください。 –

+0

Andrewに完全に同意すると、もっと知る必要があります。 – LaGrandMere

+0

悲しいことに、それはベンダー製品の一部です。これはデータのインポートであり、単一の正規表現変換を適用することで最小限の 'カスタマイズ'が可能です。 – Jon

答えて

0

さらに調査したところ、他の回答はありませんでしたが、私はこれが単一のJava正規表現では不可能であると結論付けました。

5

が、私は単一のJava正規表現一致でこれを行うために必要/交換してください。

そのような解決策が存在することを疑問に思える...従来の方法は、ソース文字列を反復処理するためにMatcher.appendReplacementMatcher.appendTailを使用パターンが一致見つけ、それらに任意のロジックを実行し、適切な置換を交換することであろう。

Javascriptでは、固定文字列ではなく「スマート置換」としてa function with String.replace()を使用できます。

+0

+1:私より良い提案:) – LaGrandMere

+0

ありがとう。上記のコメントを追加しました。これはベンダー製品の一部で、唯一のAPIフックはフィールド上で単一の正規表現変換です。ですから、すべてのファイルを前処理する必要があるようです。 – Jon

0

編集:Oups、条件を交換して、単一の正規表現を読んでいない...

まあ、私が提案したものについて気にしないで...

んでした。ここは、正規表現は正確にあなたが必要と一致するです:

^[AZ] {3} $ 9

をとにかく、置き換えシングルで、私はあなたがそれを行う可能性がどのように表示されていない...

誰かが私よりも助けになることを願っています。

エンド編集

のStringBufferを使用して、文字を挿入することができます。result

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(); 

は、あなたが必要と右の文字列を持っています。

+0

'StringBuilder'、みんな、' StringBuilder' ... – khachik

+0

@khachik:JonがJava 5以上で動作しているのか、彼がマルチスレッド環境にいるのかどうかは分からないので、私は常にこのような場合にStringBufferを使います:) – LaGrandMere

関連する問題