2016-03-24 13 views
1

は私がTEXT.TXTであるとし交換する前に追加します。マッチ数と

prop:"txt1" prop:'txt4' prop:"txt13" 

そして、私はそれが(9を追加すること)になりたい:JavaScriptで

prop:"txt10" prop:'txt13' prop:"txt22" 

、それは次のようになり:

var output = input.replace(/prop:(['"])txt(\d+)\1/g, function(match, quote, number){ 
    return "prop:" + quote + "txt" + (parseInt(number) + 9) + quote; 
}); 

私はC#で上記のコードを記述しようとしている:

Visual Studioは、3番目のパラメータがMatchEvaluator evaluatorであることを示しています。しかし、私はそれを宣言/書込み/使用する方法を知らない。

助けを歓迎します。御時間ありがとうございます。

+0

これで簡単にします**正規表現を使用して算術演算**? –

+0

@noob。私は数の値を変更する必要があり、私の心に来る唯一のアイデアは、正規表現を使用していた...とにかく、あなたはそれを算術と考えることができます –

答えて

1

あなたはMatch evaluatorを使用して、あなたがに9を追加することができますint型の値として番号を解析するInt32.Parseを使用することができます。

Regex.Replace(content, @"prop:(['""])txt(\d+)\1", 
m => string.Format("prop:{0}txt{1}{0}", 
    m.Groups[1].Value, 
    (Int32.Parse(m.Groups[2].Value) + 9).ToString())) 

IDEONE demoを参照してください:私が使用しています

var content = "prop:\"txt1\" prop:'txt4' prop:\"txt13\""; 
var r = Regex.Replace(content, @"prop:(['""])txt(\d+)\1", 
    m => string.Format("prop:{0}txt{1}{0}", 
     m.Groups[1].Value, 
     (Int32.Parse(m.Groups[2].Value) + 9).ToString())); 
Console.WriteLine(r); // => prop:"10" prop:'13' prop:"22" 

注意単一のバックスラッシュを使用して特殊文字をエスケープし、簡略文字クラスを定義するように(つまり、逐語文字リテラルでは、二重引用符を二重にしてリテラル二重引用符を1つ指定する必要があります)。

+1

stribizhevありがとうございました;) –

1

MatchEvaluatorは、delegateです。 Matchを受け取り、置換値を返す関数を記述する必要があります。これを行う1つの方法を以下に示します:

private static string AddEvaluator(Match match) 
{ 
    int newValue = Int32.Parse(match.Groups[2].Value) + 9; 
    return String.Format("prop:{0}txt{1}{0}", match.Groups[1].Value, newValue) 
} 

public static void Main() 
{ 
    string path = @"C:/text.txt"; 
    string content = File.ReadAllText(path); 
    File.WriteAllText(path, Regex.Replace(content, "prop:(['\"])txt(\\d+)\\1", AddEvaluator)); 
} 
+0

私は受け入れられているので、 ..でも、ありがとうございます+1 ...私は今考えていると思う;) –