gsub символы кода ASCII из строки в ruby - PullRequest
15 голосов
/ 13 августа 2010

Я использую 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/,'')

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

Ответы [ 5 ]

14 голосов
/ 11 февраля 2014

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

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

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

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

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

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

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

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

6 голосов
/ 13 августа 2010

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

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

4 голосов
/ 13 августа 2010

Обновление (2018): этот код не работает в текущих версиях Ruby.Пожалуйста, обратитесь к другим ответам.

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

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

или

s.delete 160.chr+194.chr
0 голосов
/ 12 декабря 2011

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

0 голосов
/ 13 августа 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...