每种编程语言对\n\r都有自己的解释.

the Rust reference开始:

空格转义是字符U+006E(n)、U+0072(r)中的一个,

根据这句话,如果 rust 字符是\n\r,我会说 rust 字符是新行字符.在Windows上,它可能是\r\n的组合.不过我不确定.

下面呢?

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

在我看来,我们缺少了像char.is_new_line()这样的东西.

我需要自己定义Unicode新行字符吗?

推荐答案

Java、Python、Go和JavaScript等语言在新行字符的构成以及如何转换为"新行"方面存在很大的实际分歧.在多行模式下,包含regex引擎的电池是如何处理像$这样的模式和像\r\r\n\n这样的字符串的:是有两行(\r\r\n\n)、三行(\r\r\n\n,像Unicode所说)还是四行(\r\r\n\n,像JS所看到的)?Go和Python不会将\r\n视为一个$,Rust的regex crate 也不会;然而,Java的的确如此.我不知道有哪种语言的电池能将换行符处理扩展到更多的Unicode字符.

所以这里的外卖是

  • 大家一致认为\n是一条新线
  • \r\n可能是一条新线
  • 除非\r\n被视为两个换行符
  • 除非\r\n是"某个字符后跟一个换行符"
  • 除此之外,你不会再有新词了.

如果你真的需要更多的Unicode字符作为换行符来处理,你必须定义一个函数来实现这一点.不要期待现实世界中的投入.毕竟,我们有了无数年的ASCII记录分隔符,每个人都使用\t.

更新:请参阅http://www.unicode.org/reports/tr14/tr14-32.html#BreakingRulesLB5节,了解为什么\r\r\n应被视为两个换行符.你可以通读整页,了解你最初的问题应该如何实施.我的猜测是,当你达到"South East Asian: line breaks require morphological analysis"时,你将关闭该选项卡:-)

Rust相关问答推荐

if let声明中临时对象的生存期

如何在Rust中为具有多个数据持有者的enum变体编写文档 comments ?

为什么拥有的trait对象的相等运算符移动了正确的操作数?

我如何在Rust中使用传递依赖中的特征?

Rust TcpStream不能在读取后写入,但可以在不读取的情况下写入.为什么?

这是不是在不造成嵌套的情况下从枚举中取出想要的变体的惯用方法?

在rust sqlx中使用ilike和push bind

如何修复&q;无法返回引用函数参数的值在异步规则中返回引用当前函数&q;拥有的数据的值?

当我try 使用 SKI 演算中的S I I实现递归时,为什么 Rust 会失败?

如何使用tracing-subscriberRust crate 构建多编写者、全局过滤订阅者

Boxing 如何将数据从堆栈移动到堆?

Rust Option 的空显式泛型参数

通过写入 std::io::stdout() 输出不可见

我们可以在 Rust 切片中使用步骤吗?

`use` 和 `crate` 关键字在 Rust 项目中效果不佳

为什么我可以使用 &mut (**ref) 创建两个实时 &mut 到同一个变量?

在 Rust 中,我如何处理请求 javascript 的页面?

使用 `clap` 在 Rust CLI 工具中设置布尔标志

Abortable:悬而未决的期货?

火箭整流罩、tokio-scheduler 和 cron 的生命周期问题