簡體   English   中英

如何在Rust中檢查字符是否是Unicode換行符(不僅是ASCII)?

[英]How do I check if a character is a Unicode new-line character (not only ASCII) in Rust?

每種編程語言都有自己對\\n\\r \\n的解釋。 Unicode支持可以表示新行的多個字符。

Rust參考

空白轉義是字符U + 006E(n),U + 0072(r)或U + 0074(t)之一,表示Unicode值U + 000A(LF),U + 000D(CR)或U + 0009(HT)。

基於該語句,我會說如果是\\n\\r ,則Rust字符是換行符。 在Windows上,它可能是\\r\\n的組合。 我不確定。

以下怎么樣?

  • 下一行字符(U + 0085)
  • 行分隔符(U + 2028)
  • 段落分隔符(U + 2029)

在我看來,我們缺少像char.is_new_line()這樣的東西。 我查看了Unicode字符類別,但找不到新行的定義。

我是否必須提出自己對Unicode換行符的定義?

Java,Python,Go和JavaScript等語言之間存在相當大的實際分歧,即構成換行符的內容以及轉換為“新行”的方式。 包含電池的正則表達式引擎如何在多行模式下對像\\r\\r\\n\\n字符串這樣的字符串處理類似$模式表明了分歧:是否有兩行( \\r\\r\\n\\n ) ,三行( \\r\\r\\n\\n ,像Unicode說的那樣)或四行( \\r\\r\\n\\n ,就像JS看到的那樣)? Go和Python不會將\\r\\n視為單個$ ,Rust的正則表達式也不會; 然而,Java確實如此。 我不知道任何語言的電池將換行處理擴展到任何更多的Unicode字符。

所以這里的內容是

  • 同意\\n是換行符
  • \\r\\n可能是一個換行符
  • 除非\\r\\n被視為兩個換行符
  • 除非\\r\\n是“某個字符后跟換行符”
  • 除此之外你不會再有任何換行符了。

如果您確實需要將更多Unicode字符視為換行符,則必須定義一個為您執行此操作的函數。 不要指望期望的真實世界輸入。 畢竟,我們有很多年的ASCII記錄分隔符,而且每個人都使用\\t來代替。

更新:請參閱http://www.unicode.org/reports/tr14/tr14-32.html#BreakingRules部分LB5了解為什么\\r\\r\\n應被視為兩個換行符。 您可以閱讀整頁以了解原始問題的實施方式。 我的猜測是你到達“ 東南亞:換行需要形態分析 ”你將關閉標簽:-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM