2010-06-11 23 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」。

相關問題