2011-01-07 40 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} 
相关问题