Ruby命令行使用“-e”开关,问题打印到stdout

时间:2011-01-07 23:53:29

标签: ruby

我想取一串字符,只解析数字,然后将该字符串打印到stdout。必须使用命令行上的ruby -e开关一行完成。它必须是一行,因为我使用它作为带有do shell script命令的applescript的一部分。

这是我提出的代码:

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

我意识到每个数字都会调用打印。这是星期五,我的脑子被炸了。 :-)有没有人有任何建议?

谢谢!

3 个答案:

答案 0 :(得分:4)

您可以使用gsub

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

答案 1 :(得分:1)

您正在将块发送到to_a方法,该方法不会对块执行任何操作。你可以轻松地做到:

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

您也可以使用scan

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

答案 2 :(得分:0)

你只需要一个.map吗?

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

似乎做你想做的事。

(免责声明:我不是Ruby程序员,所以可能错过了这一点!)