[英]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所提到的,你在你的正则表达式中使用了\\\\
,在正则表达式文字/.../
实际上转义为反斜杠,这意味着你将字面反斜杠\\
, r
或n
作为表达式的一部分进行匹配。 逃避字符在正则表达式文字中的工作方式不同,因为\\
使用了很多,因此对它进行特殊的转义是没有意义的(与常规字符串相反,这是一个完全不同的动物)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.