2010-05-12 89 views
0

我有一個名爲'raw'的字符串。我試圖解析它在紅寶石方式如下:Ruby中的正則表達式幫助

raw = "HbA1C ranging 8.0—10.0%" 
raw.scan /\d*\.?\d+[ ]*(-+|\342\200\224)[ ]*\d*\.?\d+/ 

輸出從上面的是[]。我認爲它應該是:["8.0—10.0"]

有沒有人有任何洞察上述正則表達式有什麼問題?

注:\342\200\224等於(em-dash,U + 2014)。

不工作這件作品是: (-+|\342\200\224)

我覺得應該是等同於說,比賽的1個或多個-或匹配的字符串\342\200\224

任何幫助將不勝感激!

+0

如果字符串包含連字符而不是em-dash,會發生什麼情況?即:「8.0-10.0%的HbA1C」 – 2010-05-12 01:37:24

回答

0
raw = "HbA1C ranging 8.0—10.0%" 
raw.scan(/\d+\.\d+.+\d+\.\d+/) 
#=> ["8.0\342\200\22410.0"] 
1

原始正則表達式適合我(ruby 1.8.7),justs需要捕獲是非捕獲和掃描將輸出整個匹配。或切換到String#[]String#match而不是String#scan,並且不要編輯正則表達式。

raw = "HbA1C ranging 8.0—10.0%" 
raw.scan /\d*\.?\d+[ ]*(?:-+|\342\200\224)[ ]*\d*\.?\d+/ 
# => ["8.0—10.0"] 

出於測試/構建正則表達式在Ruby中有一個夢幻般的工具在上http://rubular.com,使得它容易得多。 http://rubular.com/r/b1318BBimb是帶有少數測試用例的已編輯正則表達式,以確保它對它們有效。