Ответ 1
Вы можете сделать это
a.gsub!(/[^0-9A-Za-z]/, '')
Я делал проблемы с pythonchallenge написанием кода в ruby, именно этот. Он содержит очень длинную строку в источнике страницы со специальными символами. Я пытался найти способ удалить их/проверить алфавитные символы.
Я попытался использовать метод сканирования, но я думаю, что я не могу использовать его правильно. Я также пробовал delete!
следующим образом:
a = "PAGE SOURCE CODE PASTED HERE"
a.delete! "!", "@" #and so on with special chars, does not work(?)
a
Как я могу это сделать?
Спасибо
Вы можете сделать это
a.gsub!(/[^0-9A-Za-z]/, '')
попробуйте с gsub
a.gsub!(/[[email protected]%&"]/,'')
попробуйте regexp на rubular.com
если вы хотите что-то более общее, вы можете иметь строку с допустимыми символами и удалить то, что там отсутствует:
a.gsub!(/[^abcdefghijklmnopqrstuvwxyz ]/,'')
Когда вы даете несколько аргументов string#delete
, это пересечение тех аргументов, которые удалены. a.delete! "!", "@"
удаляет пересечения наборов !
и @
, что означает, что ничего не будет удалено и метод вернет nil
.
Что вы хотели сделать, это a.delete! "[email protected]"
с символами для удаления, переданными как одна строка.
Поскольку проблема заключается в том, чтобы очистить беспорядок и найти в нем сообщение, я бы выбрал белый список вместо того, чтобы удалять специальные символы. Метод delete принимает диапазоны с -
и отрицаниями с помощью ^
(аналогично регулярному выражению), поэтому вы можете сделать что-то вроде этого: a.delete! "^A-Za-z "
.
Вы также можете использовать регулярные выражения, как показано @arieljuod.
gsub
является одним из наиболее используемых методов Ruby в дикой природе.
specialname="Hello!#[email protected]"
cleanedname = specialname.gsub(/[^a-zA-Z0-9\-]/,"")
Если вы не хотите изменять исходную строку, т.е. решить проблему.
str.each_char do |letter|
if letter =~ /[a-z]/
p letter
end
end
Я думаю, что 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"