2010-06-11 25 views
1

在Silverlight中使用多行TextBox(AcceptsReturn =“True”)时,换行符记录为\ r而不是\ r \ n。当数据被保存并且稍后导出为另一种由Windows应用程序读取的格式时,这会导致问题。如何处理Silverlight文本框中的换行符

我正在考虑使用正则表达式来替换\ r \ n中的任何单个\ r字符,但是我吮吸正则表达式并且无法使其正常工作。

因为可能会有行结尾的混合,只是盲目地用\ r \ n替换\ r并不会削减它。

所以两个问题真的...

如果正则表达式是去什么是正确的模式呢?

有没有办法让Silverlight尊重TextBox中自己的Environment.NewLine字符,并让它插入\ r \ n而不是仅仅一个\ r?

+0

昨天我偶然发现了同样的问题,所以谢谢你的问题和答案。看起来这不仅仅是“奇怪的行为”,这是一个明确的微软设计选择!你可以在这里的Microsoft Connect票证中看到这个:http://connect.microsoft。com/VisualStudio/feedback/details/419751/silverlight-textboxes-environment-newline – 2011-07-21 07:52:01

回答

4

我不知道Silverlight,但我想(我希望!)有一种方法可以让它尊重Environment.NewLine - 这将是一个更好的方法。但是,如果没有,你可以使用正则表达式。我假设您的文本中包含\r,\n\r\n的所有文本,并且从未将这些文本用作行结尾的任何内容 - 您只需要一致性。 (如果它们显示为非行结束数据,则正则表达式解决方案变得更加困难,并且可能不可能)。因此,您希望用\r\n替换所有出现的\r(?!\n)|(?<!\r)\n。第一个正则表达式的前半部分与任何\r不匹配除以\n;下半场比赛只有一个\n,之前没有\r

在此正则表达式的花式运营商被称为环视(?=...)是正超前,(?<=...)是正回顾后,(?!...)是负先行,并(?<!...)是负回顾后发。它们中的每一个都是零宽度断言,如^$;如果给定的正则表达式成功/失败(分别为正/负),匹配字符串中的当前位置之后/之前(对于前瞻/后视),则它们匹配成功而不消耗输入。

+1

+1因为在完全相同的时间有完全相同的(好的)想法:) – 2010-06-11 12:53:35

+0

好吧,先生:) – 2010-06-11 12:56:55

+0

谢谢你们,只是我正在寻找的一块正则表达式,它工作完美。 Silverlight似乎有一些古怪的行为,甚至没有注意到这一点,直到其中一个用户输出到csv并抱怨所有的笑脸字符。 – 2010-06-11 14:02:02

4

我根本不知道Silverlight(我发现你描述的行为很奇怪),但也许你可以尝试搜索\r(?!\n)并用\r\n替换它。

\r(?!\n)的意思是“匹配\r当且仅当它没有后跟\n”。

如果你也碰巧有\n前没有\r S和希望“正常化”这些呢,然后搜索\r(?!\n)|(?<!\r)\n\r\n取代。

(?<!\r)\n的意思是“匹配\n当且仅当它没有在之前\r”。

相关问题