0
String jData="Memur adayar\u0131n\u0131n en b\u00fcy\u00fck sorunar"
    + "\u0131ndan KPSS \u0 131 ";   
jData = Regex.Replace(jData, @"\\u0 ", @"\\u0", RegexOptions.Compiled).Trim();

"\u0 "jDataを置き換える"\u0"必要があります (つまり、末尾の空白文字がある場合は削除します) が、使用した方法が機能しません。私は何をすべきか?

4

4 に答える 4

1

そのため、文字列に不正な形式の Unicode エスケープがあり、. の後の空白を削除して修正する必要があります0。それはとても簡単です:

jData = Regex.Replace(jData, @"(\\u0)\s+(\w+)", "$1$2");

この中で最も難しいのは、すべてのバックスラッシュが何を意味するのかを理解することです。C# は、逐語的文字列の代替文字列リテラル構文をサポートするのに役立ちます。バックスラッシュでエスケープする必要がある唯一の文字は、バックスラッシュ自体です。(引用符もエスケープする必要がありますが、別の引用符でエスケープします"")。


それはさておき、私がこの質問に答えた本当の理由は、 を使用しないようにアドバイスすることでしたRegexOptions.Compiled。多くの人が正規表現の動作を高速化すると言っているのを聞いたことがあると思います。それは本当ですが、単純化しすぎています。この問題に関する適切な議論については、この記事をお読みください。RegexOptions.Compiledそれなしでは解決できない問題に遭遇するまで、存在することさえ忘れてください。

于 2013-01-03T17:07:27.840 に答える
0

私はそれが機能したと思います

string jData= @"Memur adayar\u0131n\u0131n en b\u00fcy\u00fck sorunar\u0131ndan KPSS \u0 131 ";   
jData = Regex.Replace(jData, @"\\u0 ", @"\u0", RegexOptions.Compiled).Trim();

'@'入力文字列の前に余分なものを追加したことに注意してください。そして、正規表現の部分で、3番目の引数をに変更しました@"\u0"

于 2013-01-03T14:04:43.233 に答える
0

サンプル文字列に問題があります。実際には文字列にバックスラッシュが必要だったと思います。その場合、最も簡単な方法は、文字列リテラルの前に @ を配置することです。そして、2 行目には逆の問題があると思います。各文字列にバックスラッシュを 1 つだけ使用するか、@ を省略してください。ここで Regex.Replace() を使用する理由はありません。jData.Replace() で十分です。

        String jData=@"Memur adayar\u0131n\u0131n en b\u00fcy\u00fck sorunar"
            + @"\u0131ndan KPSS \u0 131 ";   
        jData = jData.Replace(@"\u0 ", @"\u0").Trim();
于 2013-01-03T14:10:58.053 に答える
0

検索: @"\\u0 " 置換:@"\\u0"

それらは同じです。大文字のOまたは通常のOで試してください

于 2013-01-03T13:48:41.970 に答える