2011-01-07 36 views
0

我想取一串字符,僅解析數字,然後將該數字串輸出到標準輸出。必須使用命令行中的ruby -e開關,使用一行完成。它必須是一行,因爲我使用此命令作爲do shell script命令的一部分。Ruby命令行使用「-e」開關,問題打印到標準輸出

這是我想出了代碼:

ruby -e '%{303-123-4567}.to_s.chars.to_a {|char| print char if char =~ /\d/}'

我意識到打印正在呼籲每個數字。這是星期五,我的大腦被炸。 :-) 有沒有人有什麼建議?

謝謝!

回答

4

你可以只使用gsub

$ ruby -e 'print %{303-123-4567}.gsub(/[^\d]/, "")' 
3031234567 
+0

這是完美的。謝謝! – 2011-01-10 16:18:16

0

你只需要一個.map在那裏嗎?

ruby -e '%{303-123-4567}.to_s.chars.to_a.map {|char| print char if char =~ /\d/}' 

似乎做你想做的。

(免責聲明:我不是一個Ruby程序員,所以可以在這裏錯過了這一點!)

1

您發送塊到to_a方法,這不會對塊做任何事情。你可以做伊斯利:

%{303-123-4567}.each_char {|ch| print ch if ch =~ /\d/} 

您可以使用scan太:

%{303-123-4567}.scan(/\d/) {|num| print num} 
相關問題