2010-08-13 67 views
10

我正在使用nokogiri屏幕刮一些HTML。在一些事件,我得到一些奇怪的字符後,我已經找到了ASCII代碼,這些字符用下面的代碼:gsub從紅寶石中的字符串中的ASCII碼字符

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

有問題的人物有194 ASCII碼和160

我想以某種方式解析這些字符。

我試過下面的代碼,但它不起作用。

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

誰能告訴我如何做到這一點?

+0

你應該檢查一個頁面的編碼是否與你的一個字符串相對應。你正在使用哪個Ruby版本? – 2010-08-13 05:46:23

+0

我正在使用Ruby 1.8.7 – dagda1 2010-08-13 06:48:04

回答

6

您也可以嘗試

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

s.delete 160.chr+194.chr 
+0

刪除功能的竅門。謝謝!! – dagda1 2010-08-13 08:05:06

+5

這個:'''s.gsub(/ \ xA0 | \ xC2 /,'')'''是不正確的。您需要首先轉義:'''s.gsub(/ \\ xA0 | \\ xC2 /,'')'''以避免SyntaxError:(pry):6:多字節無效轉義:/ \ xA0 | \ xC2 /'''錯誤,即使你這樣做,你也會得到:'''ArgumentError:UTF-8'''中的無效字節序列。嘗試'''s.force_encoding(「BINARY」).gsub(0xA0.chr,「」)'''爲第一個並相應地改變第二個。 – Cacofonix 2012-06-12 10:51:14

0

首先想到的是你應該使用gsub!而不是gsub

gsub返回一個字符串和gsub!執行替換

+0

我不會說他*應該*使用'gsub!'。在不瞭解背景的情況下,它可能更合適,或者它可能是非常不合適的。 – Chuck 2010-08-13 04:11:31

+0

我同意。我在這個背景下想的是,他並沒有把它分配給另一個變量。但是你的權利應該是錯誤的措詞。 – 2010-08-13 15:42:17

5

你的問題是,你想要做一個方法調用,而是你正在創建一個正則表達式。您正在搜索並替換由字符串「160」後跟任意字符,然後是字符串「chr」組成的字符串,然後執行相同操作,除非將「160」替換爲「194」。

取而代之,做gsub(160.chr, '')

+0

我得到以下錯誤,如果我使用該代碼: RegexpError:提前結束正則表達式:// – dagda1 2010-08-13 04:15:49

+0

我認爲這是因爲gsub(194.chr,'')引用非ASCII字符。 – dagda1 2010-08-13 04:25:52

+0

@ dagda1:你使用的是什麼Ruby版本?我在1.8.7或1.9.1中沒有遇到這個錯誤。 – Chuck 2010-08-13 05:12:51

0

我得到「無效的多字節逃生」的錯誤,同時嘗試上述解決方案,但對於不同的情況。當數字大於999時,Google返回\ xA0,我想將其刪除。所以我所做的就是使用return_value.gsub(/ [\ xA0]/n,「」),它對我來說工作得非常好。

7

我發現這個問題時,試圖去除不可見字符時,「修剪」一個字符串。

s.strip並沒有爲我工作,我發現不可見字符有ord194

無的方法我上面的工作,但後來我發現「Convert non-breaking spaces to spaces in Ruby」的問題,其表示:

Use /\u00a0/ to match non-breaking spaces: s.gsub(/\u00a0/, ' ') converts all non-breaking spaces to regular spaces

Use /[[:space:]]/ to match all whitespace, including Unicode whitespace like non-breaking spaces. This is unlike /\s/ , which matches only ASCII whitespace.

很高興我找到了!現在,我使用的是:

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

這並沒有回答如何gsub特定字符代碼的問題,但如果你只是想去掉空格它似乎工作得很好。

+0

對於我來說,這是唯一的答案,就像Ruby 2.1.0一樣。有一個upvote! 's.gsub(/^[:space:] + $ /,'')'雖然對我的目的更好。 – TheLonelyGhost 2014-03-07 19:50:23