web-dev-qa-db-ja.com

単一の円記号を二重の円記号に置き換えます

簡単そうですね。よくわかりません。

これが私が試しているコードです:

input = Regex.Replace(input, "\\", "\\\\\\");

ただし、エラーが発生します。

ArgumentException was unhandled-parsing "\"-Illegal\at end of pattern。

どうすればよいですか?

20
Johnny

最初のものは"\\\\"ではなく"\\"である必要があります。それはこのように動作します:

  • "\\"を書きました。
  • これは、文字列のシーケンス\に変換されます。
  • 次に、正規表現エンジンがこれを読み取ります。これは、何もエスケープしていないバックスラッシュに変換されるため、エラーがスローされます。

正規表現を使用すると、「逐語的文字列」を使用する方がはるかに簡単です。この場合、逐語的文字列は@"\\"になります。逐語的文字列を使用する場合、バックスラッシュは文字どおりに扱われるため、正規表現エンジンのエスケープを検討するだけで済みます。正規表現エンジンによって解釈されないため、2番目の文字列も@"\\"になります。

24
porges

1つのバックスラッシュを2つに置き換える場合は、文字列リテラルの形式として@"..."を使用することで、正規表現での1レベルのエスケープを排除する方が明確な場合があります。逐語的文字列とも呼ばれます。すると、それがわかりやすくなります

string output = Regex.Replace(input, @"\\", @"\\");

\から\\への置き換えです。

7
Tom
 var result = Regex.Replace(@"afd\tas\asfd\", @"\\", @"\\");

最初のパラメータは、正規表現では\である文字列\\です。
2番目のパラメーターは正規表現によって処理されないため、置換時にそのまま配置されます。

3
Alex Aza

後で正規表現パターンで入力を使用する場合は、Regex.Encodeを使用することをお勧めします。

input = Regex.Escape(input);
2
Allrameest

手遅れになるのは遅すぎます。おそらく他の誰かがこれから恩恵を受けるでしょう。とにかくこれは私のために働きました:

text = text.Replace(@"\",@"\\");

そして、私はそれがさらに簡単だと思います。

乾杯!

1
igop