[英]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.