ruby gsub 换行符
ruby gsub new line characters
我有一个包含换行符的字符串,我想将其 gsub 换成白色 space。
"hello I\r\nam a test\r\n\r\nstring".gsub(/[\r\n]/, ' ')
类似这样的事情 ^ 只有我的正则表达式似乎也在替换 'r'
和 'n'
字母。另一个限制是有时模式会重复两次,因此会被连续的两个白色 space 替换,虽然这不是可取的,但它比所有文本都被切开要好。
如果有办法只select换行符。或者,如果在使用正则表达式之外还有更简单的方法来解决这个问题,那就更好了?
如果您想用单个 space 替换连续的混合换行符,您可以使用以下正则表达式解决方案:
s.gsub(/\R+/, ' ')
参见Ruby demo。
\R
匹配任何类型的换行符,+
匹配一次或多次出现的量化子模式。
请注意,如果您必须处理旧版本的 Ruby,您将需要使用 否定字符 class [\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]+/, ' ')
(注意字符class后加了+
。)
正如 Wiktor 所提到的,您在正则表达式中使用了 \
,它在正则表达式文字 /.../
中实际上转义了一个反斜杠,这意味着您匹配的是文字反斜杠 \
、r
或 n
作为表达式的一部分。转义字符在正则表达式中的工作方式不同,因为 \
被广泛使用,因此对其进行特殊转义是没有意义的(与常规字符串相反,后者是完全不同的动物)。
我有一个包含换行符的字符串,我想将其 gsub 换成白色 space。
"hello I\r\nam a test\r\n\r\nstring".gsub(/[\r\n]/, ' ')
类似这样的事情 ^ 只有我的正则表达式似乎也在替换 'r'
和 'n'
字母。另一个限制是有时模式会重复两次,因此会被连续的两个白色 space 替换,虽然这不是可取的,但它比所有文本都被切开要好。
如果有办法只select换行符。或者,如果在使用正则表达式之外还有更简单的方法来解决这个问题,那就更好了?
如果您想用单个 space 替换连续的混合换行符,您可以使用以下正则表达式解决方案:
s.gsub(/\R+/, ' ')
参见Ruby demo。
\R
匹配任何类型的换行符,+
匹配一次或多次出现的量化子模式。
请注意,如果您必须处理旧版本的 Ruby,您将需要使用 否定字符 class [\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]+/, ' ')
(注意字符class后加了+
。)
正如 Wiktor 所提到的,您在正则表达式中使用了 \
,它在正则表达式文字 /.../
中实际上转义了一个反斜杠,这意味着您匹配的是文字反斜杠 \
、r
或 n
作为表达式的一部分。转义字符在正则表达式中的工作方式不同,因为 \
被广泛使用,因此对其进行特殊转义是没有意义的(与常规字符串相反,后者是完全不同的动物)。