6

更新希望这篇文章对使用 RichTextBoxes 的编码人员有所帮助。匹配对于普通字符串是正确的,我没有看到这个并且我没有看到richTextBox.Rtf 中的“ä”转换为“\e4r”!所以 Match.Value 是正确的 - 人为错误。

RegEx 找到正确的文本,但 Match.Value 是错误的,因为它将德语“ä”替换为“\'e4”!

让 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\'e4r-ABC ”而不是“ Primär-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 编码将值写入文本文件,看看它是否仍然不正确。

Edit: Right. The thing is that you are getting the text from a WinForms RichTextBox using the Rtf property. This will not return the text as is, but will return the RTF representation of the text. RTF is not plain text, it's a markup format to display rich text. If you open an RTF document in e.g. Notepad you will see that it has a lot of weird codes in it - including \'e4 for every 'ä' in your RTF document. If you would've used some markup (like bold text, color etc) in the RTF box, the .Rtf property would return that code as well, looking something like {\rtlch\fcs1 \af31507 \ltrch\fcs0 \cf6\insrsid15946317\charrsid15946317 test}

So use the .Text property instead. It will return the actual plain text.

于 2012-07-27T08:54:47.400 回答