ruby gsub新行字符

时间:2016-09-08 14:40:51

标签: ruby regex newline gsub

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

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

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

如果有办法只选择新行字符。或者更好的是,如果有一种更为灵活的方式来接近这个去正则表达式?

2 个答案:

答案 0 :(得分:8)

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

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

请参阅Ruby demo

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

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

\n

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

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

答案 1 :(得分:1)

这适用于您的测试用例:

"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所提到的,你在你的正则表达式中使用\\,正则表达式文字/.../内部实际上逃脱了反斜杠,这意味着你匹配文字反斜杠\,{ {1}}或r作为表达的一部分。在正则表达式文字中,转义字符的工作方式不同,因为使用n这么多,为它设置一个特殊的转义是没有意义的(与常规字符串相反,这是一个完全不同的动物)。