我有一个带换行符的字符串,我想要用于空白区域。
"hello I\r\nam a test\r\n\r\nstring".gsub(/[\\r\\n]/, ' ')
这样的事情^只有我的正则表达式似乎也在取代'r'
和'n'
字母。另一个约束有时是模式重复两次,因此会被一行中的两个空格所取代,虽然这不是优选的,但它比被分割的所有文本都要好。
如果有办法只选择新行字符。或者更好的是,如果有一种更为灵活的方式来接近这个去正则表达式?
答案 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
这么多,为它设置一个特殊的转义是没有意义的(与常规字符串相反,这是一个完全不同的动物)。