6

更新この投稿は、RichTextBoxes を使用するコーダーに役立ちます。一致は通常の文字列に対して正しいです。これは見ませんでした。また、richTextBox.Rtf で「ä」が「\e4r」に変換されるのも見ませんでした。したがって、Match.Value は正しいです - 人的エラーです。

RegEx は正しいテキストを見つけますが、ドイツ語の "ä" を "\'e4" に置き換えるため、Match.Value は間違っています!

example_text = " Primär-ABC " とし、次のコードを使用します

String example_text = "<em>Primär-ABC</em>";
Regex em = new Regex(@"<em>[^<]*</em>" );
Match emMatch = em.Match(example_text); //Works!
Match emMatch = em.Match(richtextBox.RTF); //Fails!
while (emMatch.Success)
{
  string matchValue = emMatch.Value;
  Foo(matchValue) ...
}

その場合、emMatch.Value は「 Primär-ABC 」ではなく「 Prim\'e4r-ABC を返します。

ドイツ語の ä は \'e4! に変換されます。正確な文字列で作業したいので、emMatch.Value をPrimär-ABCにする必要があります - どうすればそれを達成できますか?

4

1 に答える 1

2

どのような文脈でこれを行っていますか?

string example_text = "<em>Ich bin ein Bärliner</em>";
Regex em = new Regex(@"<em>[^<]*</em>" );
Match emMatch = em.Match(example_text);
while (emMatch.Success)
{
    Console.WriteLine(emMatch.Value);
    emMatch = emMatch.NextMatch();
}

<em>Ich bin ein Bärliner</em>これは私のコンソールに出力されます

おそらく問題は、間違ったを取得していることではなく、正しく表示されていない値の表現を取得していることです。これは多くのことに依存する可能性があります。UTF8 エンコーディングを使用して値をテキスト ファイルに書き込んでみて、それでも正しくないかどうかを確認してください。

編集:そうですね。問題は、プロパティRichTextBoxを使用して WinForms からテキストを取得していることです。Rtfこれはテキストをそのまま返すのではなく、テキストの RTF 表現を返します。RTF はプレーン テキストではなく、リッチテキストを表示するためのマークアップ形式です。たとえばメモ帳で RTF 文書を開くと、RTF 文書\'e4のすべての 'ä' を含め、多くの奇妙なコードが含まれていることがわかります。RTF ボックスで何らかのマークアップ (太字のテキスト、色など) を使用した場合、.Rtfプロパティは次のようなコードも返します。{\rtlch\fcs1 \af31507 \ltrch\fcs0 \cf6\insrsid15946317\charrsid15946317 test}

.Textそのため、代わりにプロパティを使用してください。実際のプレーンテキストを返します。

于 2012-07-27T08:54:47.400 に答える