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

Символы кода gsub ASCII из строки в рубине

Я использую nokogiri для скрипирования некоторого HTML. В некоторых случаях я возвращаю некоторые странные символы, я отследил код ASCII для этих символов со следующим кодом:

  @parser.leads[0].phone_numbers[0].each_byte  do |c|
    puts "char=#{c}"
  end

Соответствующие символы имеют код ASCII 194 и 160.

Я хочу как-то отключить эти символы во время разбора.

Я пробовал следующий код, но он не работает.

@parser.leads[0].phone_numbers[0].gsub(/160.chr/,'').gsub(/194.chr/,'')

Может ли кто-нибудь сказать мне, как это сделать?

4b9b3361

Ответ 1

Вы также можете попробовать

s.gsub(/\xA0|\xC2/, '')

или

s.delete 160.chr+194.chr

Ответ 2

Я нашел этот вопрос, пытаясь вырезать невидимые символы, когда "обрезает" строку.

s.strip не работал у меня, и я обнаружил, что невидимый персонаж имел номер ord 194

Ни один из вышеперечисленных методов не работал у меня, но затем я нашел "Преобразовать неразрывные пробелы в пробелы в Ruby", в котором говорится:

Используйте /\u00a0/ для соответствия неразрывным пробелам: s.gsub(/\u00a0/, ' ') преобразует все неразрывные пробелы в регулярные пробелы

Используйте /[[:space:]]/ для соответствия всем пробелам, включая пробелы Unicode, такие как неразрывные пробелы. Это не похоже на /\s/, которое соответствует только пробелу ASCII.

Так рад, что нашел это! Теперь я использую:

s.gsub(/[[:space:]]/,'')

Это не отвечает на вопрос о том, как gsub конкретные коды символов, но если вы просто пытаетесь удалить пробельные символы, это работает очень хорошо.

Ответ 3

Ваша проблема в том, что вы хотите выполнить вызов метода, но вместо этого вы создаете Regexp. Вы ищете и заменяете строки, состоящие из строки "160", за которой следует любой символ, а затем строка "chr", а затем выполняете то же самое, за исключением "160", замененных на "194".

Вместо этого сделайте gsub(160.chr, '').

Ответ 4

Прежде всего, нужно было бы использовать gsub! вместо gsub

gsub возвращает строку и gsub! выполняет замену на месте

Ответ 5

Я пытался получить ошибку "недопустимый многобайтовый побег" при попытке решения выше, но для другой ситуации. Google был возвращен \xA0, когда число больше 999, и я хотел его удалить. Так что я сделал, это использовать return_value.gsub(/[\ xA0]/n, ""), и это сработало отлично для меня.