2015-01-08 3 views

ответ

0
'Java \n\n c# \n\n c/c++'.gsub! /\\n\\n/, '\n' 
+1

'GSUB («\ п \ п»,«\ п»)' намного чище – shivam

1

Вы, вероятно, хотите устранить тройные и т. Д. События. В таком случае лучшим вариантом является использование счетчика матча:

#         ⇓⇓⇓⇓ 
'Java \n\n c# \n\n c/c++'.gsub /\\n{1,}/, '\n' 

В данном конкретном случае, «один или более» имеет S синтаксический сахар для него:

#         ⇓ 
'Java \n\n c# \n\n c/c++'.gsub /\\n+/, '\n' 

Если вы используете Ruby2 , есть \R матч в любой комбинации \r и \n.

Для устранения ровно два occurencies, можно использовать:

#         ⇓⇓⇓ 
'Java \n\n c# \n\n c/c++'.gsub /\\n{2}/, '\n' 

И, наконец, есть функция для удаления нескольких occurencies из \n из строки с помощью named matches и обратных ссылок:

def singlify s 
    s.gsub /(?<sym>\\n)\g<sym>+/, '\k<sym>' 
end 

singlify 'Java \n\n c# \n\n c/c++' 
# Java \n c# \n c/c++' 
+0

Thoese хорошо работает для меня «Java \ n \ nC# \ n \ nc/C++ '. squeeze! (" \ n ") ' Java \ n \ nC# \ n \ nc/C++ '. gsub! (/ \ n {1,} /) Спасибо, – huynhthinh

4

Использование squeeze функция String class

[18] pry(main)> "Java \n\n c# \n\n c/c++".squeeze("\n") 
=> "Java \n c# \n c/c++" 

Однако, она возвращает новую строку, в которой проходит одного и того же характера, которые происходят в этом наборе заменяются одним символом, Так

[18] pry(main)> "Java \n\n\n\n\n c# \n\n\n\n\n c/c++".squeeze("\n") 
=> "Java \n c# \n c/c++" 
+0

Thoese хорошо работает для меня «Java \ n \ nC# \ n \ nc/C++ '. squeeze! (" \ n ") ' Java \ n \ nC# \ n \ nc/C++ '. gsub! (/ \ n {1,} /) Спасибо всем, – huynhthinh

Смежные вопросы