2013-08-12 2 views
5

У меня есть это выражение:с использованием GSUB в рубиновых строках правильно

channelName = rhash["Channel"].gsub("'", " ") 

он прекрасно работает. Однако я могу заменить только 1 символ. Я хочу добавить еще несколько символов для замены. Так что я попытался следующие:

channelName = rhash["Channel"].gsub(/[':;] /, " ") 

Это не работает, то есть не было никакой замены делается на струнах и сообщение об ошибке. Я также пробовал:

channelName = rhash["Channel"].gsub!("'", " ") 

Это привело к пустой строке. Так совсем не то, чего я хотел.

Я хотел бы иметь метод GSUB заменить следующие символы с пробелом в моей строке:

' ; : 

Мои вопросы:

  1. Как структурировать мой метод GSUB так, что все экземпляры вышеуказанных символов заменяются пробелом?

  2. Что происходит с gsub! выше, поскольку он возвращает пробел.

+0

Пробелы много вопросов в регулярном выражении ... – meagar

+0

@meagar Если вы не используйте 'x' вариант правильный? http://www.ruby-doc.org/core-2.0/Regexp.html#label-Options – squiguy

+1

Почему бы не использовать ['String # tr'] (http://ruby-doc.org/core-2.0/String .html # method-i-tr) для простых вещей, подобных этому? –

ответ

13

Ваша вторая попытка была очень близка. Проблема в том, что вы оставили пробел после закрывающей скобки, то есть он искал только один из этих символов , а затем пробел.

Попробуйте это:

channelName = rhash["Channel"].gsub(/[':;]/, " ") 
+1

То же, что и на этот ответ. Кроме того, 'string.gsub! (" '"," ")' Будет возвращать нуль, если никакие подстановки не выполнялись, поэтому вы, вероятно, видите «rash» [«Channel»] = nil'. Смотрите: http://ruby-doc.org/core-2.0/String.html#method-i-gsub-21 – jslivka

+0

@jslivka спасибо за это разъяснение +1. Мне было интересно, почему это происходит. – banditKing

+0

@ Dylan Markow Спасибо. Это сработало – banditKing

4

Это не ответ на ваш вопрос, но это лучший способ сделать это.

channelName = rhash["Channel"].tr("':;", " ") 
+0

Спасибо за подсказку. Это помогает мне лучше писать код :) +1 – banditKing

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