20

それは十分に簡単に思えますよね?まあ、私は知りません。

私が試しているコードは次のとおりです。

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

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

ArgumentException が処理されませんでした - "\" を解析中 - パターンの末尾にある \ が無効です。

どうすればいいですか?

4

5 に答える 5

25

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

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

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

于 2011-05-24T03:53:38.543 に答える
8

1つの円記号を2つの円記号に置き換えたい場合は@"..."、文字列リテラル(逐語的文字列とも呼ばれます)の形式として使用することにより、正規表現での1レベルのエスケープを排除する方が明確な場合があります。そうすれば、それを確認するのが簡単になります

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

からの置換\です\\

于 2011-05-24T03:58:36.147 に答える
6

私はあなたを助けるには遅すぎることを知っています. 多分他の誰かがこれから恩恵を受けるでしょう. とにかくこれは私のために働いた:

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

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

乾杯!

于 2016-08-10T12:53:33.630 に答える
4
 var result = Regex.Replace(@"afd\tas\asfd\", @"\\", @"\\");

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

于 2011-05-24T03:55:49.000 に答える
2

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

input = Regex.Escape(input);
于 2011-05-24T06:02:07.393 に答える