Подтвердить что ты не робот

Удаление всех специальных символов из строки - ruby

Я делал проблемы с pythonchallenge написанием кода в ruby, именно этот. Он содержит очень длинную строку в источнике страницы со специальными символами. Я пытался найти способ удалить их/проверить алфавитные символы.

Я попытался использовать метод сканирования, но я думаю, что я не могу использовать его правильно. Я также пробовал delete! следующим образом:

    a = "PAGE SOURCE CODE PASTED HERE"
    a.delete! "!", "@"  #and so on with special chars, does not work(?) 
    a

Как я могу это сделать?

Спасибо

4b9b3361

Ответ 1

Вы можете сделать это

a.gsub!(/[^0-9A-Za-z]/, '')

Ответ 2

попробуйте с gsub

a.gsub!(/[[email protected]%&"]/,'')

попробуйте regexp на rubular.com

если вы хотите что-то более общее, вы можете иметь строку с допустимыми символами и удалить то, что там отсутствует:

a.gsub!(/[^abcdefghijklmnopqrstuvwxyz ]/,'')

Ответ 3

Когда вы даете несколько аргументов string#delete, это пересечение тех аргументов, которые удалены. a.delete! "!", "@" удаляет пересечения наборов ! и @, что означает, что ничего не будет удалено и метод вернет nil.

Что вы хотели сделать, это a.delete! "[email protected]" с символами для удаления, переданными как одна строка.

Поскольку проблема заключается в том, чтобы очистить беспорядок и найти в нем сообщение, я бы выбрал белый список вместо того, чтобы удалять специальные символы. Метод delete принимает диапазоны с - и отрицаниями с помощью ^ (аналогично регулярному выражению), поэтому вы можете сделать что-то вроде этого: a.delete! "^A-Za-z ".

Вы также можете использовать регулярные выражения, как показано @arieljuod.

Ответ 4

gsub является одним из наиболее используемых методов Ruby в дикой природе.

specialname="Hello!#[email protected]"
cleanedname = specialname.gsub(/[^a-zA-Z0-9\-]/,"") 

Ответ 5

Если вы не хотите изменять исходную строку, т.е. решить проблему.

str.each_char do |letter|
  if letter =~ /[a-z]/  
    p letter    
  end  
end  

Ответ 6

Я думаю, что a.gsub(/[^A-Za-z0-9 ]/, '') работает лучше в этом случае. В противном случае, если у вас есть предложение, которое обычно должно начинаться с заглавной буквы, вы потеряете свою прописную букву. Вы также потеряете любые 1337 speak или другие возможные крипты в тексте.

Пример:

phrase = "Joe can't tell between 'large' and large." => "Joe can't tell between 'large' and large."

phrase.gsub(/[^a-z ]/, '') => "oe cant tell between large and large"

phrase.gsub(/[^A-Za-z0-9 ]/, '') => "Joe cant tell between large and large"

phrase2 = "W3 a11 f10a7 d0wn h3r3!" phrase2.gsub(/[^a-z ]/, '') => " a fa dwn hr"

phrase2.gsub(/[^A-Za-z0-9 ]/, '') => "W3 a11 f10a7 d0wn h3r3"