簡體   English   中英

ruby gsub新行字符

[英]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所提到的,你在你的正則表達式中使用了\\\\ ,在正則表達式文字/.../實際上轉義為反斜杠,這意味着你將字面反斜杠\\rn作為表達式的一部分進行匹配。 逃避字符在正則表達式文字中的工作方式不同,因為\\使用了很多,因此對它進行特殊的轉義是沒有意義的(與常規字符串相反,這是一個完全不同的動物)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM