每种编程语言都有\n
和\r
的解释。
Unicode支持可以代表新行的多个字符。
空格转义是U + 006E(n),U + 0072(r)中的一个字符, 或U + 0074(t),表示Unicode值U + 000A(LF),U + 000D(CR)或 U + 0009(HT)。
根据该声明,我会说Rust字符是新行字符,如果它是\n
或\r
。在Windows上,它可能是\r
和\n
的组合。我不确定。
以下情况如何?
在我看来,我们遗漏了像char.is_new_line()
这样的东西。
我浏览了Unicode Character Categories但找不到新行的定义。
我是否必须提出我自己对Unicode换行符的定义?
答案 0 :(得分:13)
Java,Python,Go和JavaScript等语言之间存在相当大的实际分歧,即构成换行符的内容以及转换为“新行”的方式。包含电池的正则表达式引擎如何在多行模式下对$
这样的字符串处理类似\r\r\n\n
的模式,这表明存在分歧:是否有两行(\r\r\n
,{{1 }}),三行(\n
,\r
,\r\n
,如Unicode所示)或四行(\n
,\r
,\r
, \n
,就像JS看到的那样)? Go和Python不会将\n
视为单个\r\n
,Rust的正则表达式也不会;然而,Java确实如此。我不知道任何语言的电池将换行处理扩展到任何更多的Unicode字符。
所以这里的内容是
$
是换行符\n
可能只是一个换行符\r\n
视为两个换行符\r\n
是“某个字符后跟换行符”如果您确实需要将更多Unicode字符视为换行符,则必须定义一个为您执行此操作的函数。不要指望期望的真实世界输入。毕竟,我们有数千年的ASCII记录分隔符,而且每个人都使用\r\n
。
更新:请参阅http://www.unicode.org/reports/tr14/tr14-32.html#BreakingRules部分\t
,了解为什么LB5
应被视为两个换行符。您可以阅读整页以了解原始问题的实施方式。我的猜测是你到达“东南亚:换行需要形态分析”你将关闭标签: - )