46

私はまだこれを行う方法がわかりません。私はこれに関する多くの投稿を見ましたが、どの解決策も私にはうまくいきませんでした。

「a\\b」という文字列があります。必要な結果は「a\b」です。これはどのように行われますか?

--Server\DbInstanceというインスタンスを指すデータベース接続文字列を含むテキストファイルがあります

私の目的は、テキストファイルで文字列の置換を行うことです。「Server \ DbInstance」を別の値、たとえば「10.11.12.13,1200」に置き換えます。

ので、私は持っています:

stringToBeReplaced = @"Server\DbInstance";
newString = @"10.11.12.13, 1200";

ここから問題が始まります。stringToBeReplacedは常に"Server\\ DbInstance"になり、テキストファイルでこの文字列を検索すると、テキストファイルに文字列 "Server \\ DbInstance"がないため、検索に失敗します。代わりに、「Server\DbInstance」のみがあります。では、「Server\\DbInstance」を「Server\DbInstance」に変更するにはどうすればよいでしょうか。

4

9 に答える 9

85

あなたの文字列にはすでに実際には単一のバックスラッシュしか含まれていないと思われますが、デバッガーでそれを見て、C# の通常の文字列リテラルとして有効な形式にエスケープしています。

コンソールまたはメッセージ ボックスに出力する場合、バックスラッシュが 2 つ表示されますか、それとも 1 つ表示されますか?

実際に2 つのバックスラッシュを 1 つのバックスラッシュに置き換えたい場合は、簡単に行うことができます。

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

...しかし、私の推測では、とにかくオリジナルには二重のバックスラッシュが含まれていません。これで解決しない場合は、詳細をお知らせください。

編集:編集された質問に答えstringToBeReplacedて、バックスラッシュが1つしかありません。本当に。2 つのバックスラッシュが表示されている場所はどこでも、そのビューアーはそれをエスケープしています。文字列自体には 2 つのバックスラッシュはありません。文字を調べstringToBeReplaced.Lengthて数えます。

于 2011-09-20T08:46:07.367 に答える
17

誰かがこれに行き詰まり、上記の答えがどれもうまくいかなかった場合、以下は私にとってうまくいったものです. それが役に立てば幸い。

var oldString = "\\r|\\n";

// None of these worked for me
// var newString = oldString(@"\\", @"\");
// var newString = oldString.Replace("\\\\", "\\");
// var newString = oldString.Replace("\\u5b89", "\u5b89");
// var newString = Regex.Replace(oldString , @"\\", @"\");

// This is what worked
var newString = Regex.Unescape(oldString);
// newString is now "\r|\n"
于 2018-06-05T19:22:27.110 に答える
2

Regex.Unescape(string) メソッドは、入力文字列内のエスケープ文字を変換します。

Unescape メソッドは、次の 2 つの変換のいずれかを実行します。

  1. メソッドによってエスケープされる各文字からエスケープ文字 ("\") を削除することにより、Escape メソッドによって実行される変換を逆にします。これらには、\、*、+、?、|、{、[、(,)、^、$、.、#、および空白文字が含まれます。さらに、Unescape メソッドは、右かっこ (]) と右中かっこ (}) 文字のエスケープを解除します。

  2. 逐語的な文字列リテラルの 16 進数値を実際の印刷可能な文字に置き換えます。たとえば、@"\x07" を "\a" に、または @"\x0A" を "\n" に置き換えます。\a、\b、\e、\n、\r、\f、\t、\v、および英数字などのサポートされているエスケープ文字に変換されます。

string str = @"a\\b\\c";
var output = System.Text.RegularExpressions.Regex.Unescape(str);

参照:

https://docs.microsoft.com/en-us/dotnet/api/system.text.regularexpressions.regex.unescape?view=netframework-4.8

于 2020-01-10T12:33:36.447 に答える
1

試す -

var newstring = @"a\\b".Replace(@"\\",@"\");
于 2011-09-20T08:48:40.983 に答える
0

あなたは単にあなたの文字列で次のように置換を行うことができます

Str.Replace(@"\\",@"\");
于 2011-09-20T08:47:59.117 に答える
0
string a = @"a\\b";
a = a.Replace(@"\\",@"\");

動作するはずです。ウォッチ Visual STudio では、エスケープされた "\" が表示されるため、1 つの代わりに "\" が表示されることに注意してください。

于 2011-09-20T08:45:27.717 に答える