繁体   English   中英

ruby gsub新行字符

[英]ruby gsub new line characters

我有一个带有换行符的字符串,我想要用于空格。

"hello I\r\nam a test\r\n\r\nstring".gsub(/[\\r\\n]/, ' ')

像这样的东西^只有我的正则表达式似乎也在替换'r''n'字母。 另一个约束有时候模式会重复两次,因此会被一行中的两个空格所取代,尽管这不是优选的,但它比被分割的所有文本都要好。

如果有办法只选择新行字符。 或者甚至更好,如果有更多的方法来接近这个去正则表达式?

如果您要将单个空格替换为混合的连续换行符,则可以使用以下正则表达式解决方案:

s.gsub(/\R+/, ' ')

请参阅Ruby演示

\\R匹配任何类型的换行符, +匹配量化子模式的一次或多次出现。

请注意,如果您必须处理旧版本的Ruby,则需要使用与\\r\\n匹配的否定字符类 [\\r\\n]

.gsub(/[\r\n]+/, ' ')

或 - 添加所有可能的换行符:

/gsub(/(?:\u000D\u000A|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029])+/, ' ')

这适用于您的测试用例:

"hello I\\r\\nam a test\\r\\n\\r\\nstring".gsub(/[\\r\\n]/, ' ')

如果您不希望连续的\\r\\n字符导致重复的空格,则可以使用此字符:

"hello I\\r\\nam a test\\r\\n\\r\\nstring".gsub(/[\\r\\n]+/, ' ')

(注意在字符类之后添加+ 。)

正如Wiktor所提到的,你在你的正则表达式中使用了\\\\ ,在正则表达式文字/.../实际上转义为反斜杠,这意味着你将字面反斜杠\\rn作为表达式的一部分进行匹配。 逃避字符在正则表达式文字中的工作方式不同,因为\\使用了很多,因此对它进行特殊的转义是没有意义的(与常规字符串相反,这是一个完全不同的动物)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM