2017-01-25 9 views
2

C#Regex.Replaceを使用して、ある構造の文字列を別の構造にフォーマットする手作業を自動化しようとしています。 サブ文字列を特定して置き換えることはできますが、残りの文字列をどのように一致させて置き換えるかの例は見つかりませんでした。私はこれを行う簡単な方法があるのだろうかと思っていた。Regexを使用して文字列内のグループを変更する方法

は私が変換する文字列を特定し、この検索パターンを持っていると言う:

const string inputPattern1 = "SOC.\\d.\\d.\\d.PO \\d"; 

は、パラメータごとに交換用のルールを設定することが可能ですか?

ここに私が意味するものの視覚的な例があります。この例では文字列に構造体があることに注意してください。したがって、「 XのインスタンスをYで置き換える」という単純なケースではありません。

Desired Regex replace mapping

これは、私は方法論をうまくするためにC#コンソールプログラムを使用して、これまで持っているものです。

private static void Main() 
{ 
    const string input1 = "SOC.6.1.1.PO 8"; 
    const string inputPattern1 = "SOC."; 
    const string replacement1A = "SSHS-S0"; 

    // output should be: "SS06-S1C1-08" 

    var output1 = Regex.Replace(input1, inputPattern1, replacement1A); 

    Console.WriteLine("Input1: {0}",input1); 
    Console.WriteLine("Output1: {0}", output1); 
} 

結果は次のとおりです。あなたの置換文字列にグループ番号をキャプチャ

Input1: SOC.6.1.1.PO 8 
Output1: SSHS-S06.1.1.PO 8 
+0

置換文字列の構造が明確ではありません。 –

+0

貼り付けたイメージを意味しますか? – RandomHandle

+0

'const string replacement1A =" SSHS-S0 ";'これは何のためですか? –

答えて

3

用途:$4

var res = Regex.Replace(
    "SOC.6.1.1.PO 8" 
, @"SOC\.(\d)\.(\d)\.(\d)\.PO (\d)" 
, "SS0$1-S$2C$3-0$4" 
); 

$1は括弧で囲まれたグループにマッチした入力文字列の内容を表しています。

Demo.

関連する問題