什么是用于删除换行符的跨平台正则表达式?

Fle*_*ore 27 regex parsing text newline

我确信之前已经问过,但我找不到它.

基本上,假设您正在解析未知来源的文本文件并想要用其他分隔符替换换行符,这是最好的正则表达式,还是还有另一个?

(\r\n)|(\n)|(\r)

Bob*_*y B 39

弗莱彻 - 这确实被问过一次.

在这里你去:正则表达式匹配跨平台换行符

  • 扰流警报!

我想要精确的正则表达式是"\ r \n?| \n".


daw*_*awg 21

检查您的正则表达式引擎是否支持\R作为速记字符类,您不需要关注各种Unicode换行符/换行组合.如果正确实现,则可以使用透明地匹配所有各种ascii或Unicode行结尾\R.

在Unicode中你需要检测NEL(OS/390行结束,\ x85)LS(行分隔符,\ x2028)和PS(段落分隔符,\ x2029)如果你想要完全跨平台这些天.

LS,NEL和PS是否应被视为换行符,行结尾或空格是有争议的.例如,XML 1.0标准不会将 NEL 识别为换行符.ECMAScript处理LSPS作为换行符,但NEL作为空格.Perl的Unicode的 regexs会治疗VT,FF,CR,CRLF,NEL,LSPS换行符为宗旨^$正则表达式元字符.

Unicode的实施指南(第5.8节和表5.3)可能是最好的选择是什么一个什么样的"换行",是彻底治疗.

如果你只关注与DOS/Windows的/ Unix/Mac类似经典的变种ASCII,正则表达式相当于\R(?>\r\n|[\r\n])

在Unicode中,相当于\R(?>\r\n|\n|\x0b|\f|\r|\x85|\x2028|\x2029)\x0b中有一个垂直制表符; 再一次,这可能适合或不适合您对换行符的定义,但这确实符合Unicode植入的建议.(FF,或者\x0C不包含在正则表达式中,因为换页是一个新页面,而不是定义中的新行.)

  • 在Java中,`\ x2028 |\x2029`部分必须写成`\ u2028 |\u2029`,因为`\ xhh`仅用于2位十六进制字符值,而`\ uhhhh`用于4位数字十六进制字符值. (2认同)