名前の付いた2つのキャプチャグループ間の特定の位置にドル記号を挿入したいとします。問題は、置換文字列内のドル記号のすぐ後の2つの文字列が問題になることを意味します。C#dollar regex-replaceの問題
私はReplace-methodでどのように直接行うことができますか?一時的なゴミを追加して即座にもう一度取り除くことで回避策を見つけました。問題の
を参照してくださいコード:
// We want to add a dollar sign before a number and use named groups for capturing;
// varying parts of the strings are in brackets []
// [somebody] has [some-dollar-amount] in his [something]
string joeHas = "Joe has 500 in his wallet.";
string jackHas = "Jack has 500 in his pocket.";
string jimHas = "Jim has 740 in his bag.";
string jasonHas = "Jason has 900 in his car.";
Regex dollarInsertion = new Regex(@"(?<start>^.*? has)(?<end>\d+ in his .*?$)", RegexOptions.Multiline);
Console.WriteLine(joeHas);
Console.WriteLine(jackHas);
Console.WriteLine(jimHas);
Console.WriteLine(jasonHas);
Console.WriteLine("--------------------------");
joeHas = dollarInsertion.Replace(joeHas, @"${start}$${end}");
jackHas = dollarInsertion.Replace(jackHas, @"${start}$-${end}");
jimHas = dollarInsertion.Replace(jimHas, @"${start}\$${end}");
jasonHas = dollarInsertion.Replace(jasonHas, @"${start}$kkkkkk----kkkk${end}").Replace("kkkkkk----kkkk", "");
Console.WriteLine(joeHas);
Console.WriteLine(jackHas);
Console.WriteLine(jimHas);
Console.WriteLine(jasonHas);
Output:
Joe has 500 in his wallet.
Jack has 500 in his pocket.
Jim has 740 in his bag.
Jason has 900 in his car.
--------------------------
Joe has ${end}
Jack has $-500 in his pocket.
Jim has \${end}
Jason has $900 in his car.
おそらくOPは、文字列からその情報を抽出する必要があります。容易に入手できません。 –
アーマドが言ったように。私が与えた例は、置き換えの問題と実際の文字列を描くことに過ぎず、実際の文字列は単純な文章ではありません。 – user282727
それは公正です。しかし、トークンを置き換えるだけでは、正規表現は過度であり、選択肢よりも遅いです。 (RegExは遅くはないが、通常の.Replace()の速度/単純さとは一致しない) –