2014-04-01 83 views
-1

我需要提取括號內的數字。數字的數量可以改變。正則表達式在括號'[]'中查找用逗號分隔的數字嗎?

實施例:

[2,5,8] 

[11] 

[3,7,9,12] 

我需要能夠提取的最後一個號碼。問題是,JSON文件很長,包含大量的數字和文本。這些數字是我需要的唯一數字,也是唯一由逗號分隔的數字,AND沒有空格,並且被括號括起來。

到目前爲止,我已經試過正則表達式:

info.scan(/(\d,)+(\d?)\]/) 

這是剛剛輸出的方括號。

回答

0

要匹配在方括號中的最後一個號碼,你可以使用:

/\d+(?= *\])/ 

但是,如果輸入的是一個JSON字符串你可以使用JSON庫函數JSON.parse(string)抓住你想要的號碼。

+0

什麼是正則表達式來獲取所有字符串內包含'[]'..的內容?我在學習,所以問你。 –

+2

這將是:'/ \ [([^ \]] *)\] /' – anubhava

+0

@anubhava:通過上面的exp,它將在所有方括號類型']'之前獲取數字但是它不是必需的它應該有起始括號'['。即如果我們有'12323,sdasd,89]',它將取89.但是,如何確定它也有一個起始方括號,然後只提取數字。 –

-1

這可以提取括號內的最後一個數字。

# \[(?:\d+,)*(\d+)\] 

\[ 
(?: \d+ ,)* 
(\d+) 
\] 
+0

不!它匹配數組內的所有數字。 –

+0

@RajeshCO - 給我舉一個你如何使用它的例子。在我的機器上,這個正則表達式返回捕獲組1中的最後一個非逗號數字。 – sln

+0

只需在rubular.com中檢查'\ [(?:\ d +,)*(\ d +)\]'與Anubhava提交的答案請。檢查它的數組'[1,2,4132312]'這是否正常工作? –

0

如果您收到JSON,然後做正確,實用,物,並使用JSON解析器將數據返回回一個對象,然後使用該對象的正常方法來訪問它的元素:

require 'json' 

json_str = '{"array1":[2,5,8],"array2":[11],"array3":[3,7,9,12]}' 
foo = JSON[json_str] 

foo['array1'] # => [2, 5, 8] 
foo['array2'] # => [11] 
foo['array3'] # => [3, 7, 9, 12] 

「Prettified」JSON的格式可能與普通JSON輸出不同,如果您嘗試使用正則表達式,那麼這種差異可能會毀了您的一天。如果您使用的解析器這是一個沒有腦子:

puts JSON.pretty_generate(foo) 
# >> { 
# >> "array1": [ 
# >>  2, 
# >>  5, 
# >>  8 
# >> ], 
# >> "array2": [ 
# >>  11 
# >> ], 
# >> "array3": [ 
# >>  3, 
# >>  7, 
# >>  9, 
# >>  12 
# >> ] 
# >> } 

puts JSON[JSON.pretty_generate(foo)] 
# >> {"array1"=>[2, 5, 8], "array2"=>[11], "array3"=>[3, 7, 9, 12]} 

它非常類似於使用正則表達式解析HTML和XML。如果JSON是手動構建的,使用算法而不是解析器,那麼格式也可以改變;無論哪種情況,您的代碼都有很高的破解機會。

相關問題