在字符串的开头查找给定符号的确切数字

时间:2011-11-23 18:53:21

标签: ruby

我正在尝试使用尽可能少的代码解决Ruby问题:)。我想检查一个给定的字符串是否以不同数量的符号开头,假设在一个和三个'a'之间。使用reg exp很容易,我可以编写string.match(\ ^ a {1,3}。* \)。但是我必须根据a的确切数量对字符串进行更改。如何在不使用三个if的情况下检测它们:

do_string_manipulation1 if string.match(/^a.*/)
do_string_manupulation2 if string.match(/^aa.*/)
...

提前致谢:)

2 个答案:

答案 0 :(得分:1)

为什么不使用第一个正则表达式的修改版本然后只计算它返回的a?阿拉

m = string.match(/^(a{1,3})/)
case m[1].size
  when 1
  when 2
  when 3
end

当然,您也可以使用数组来存储要调用的例程,具体取决于数字:

routines = [nil, method(:do_string_manipulation1), method(:do_string_manipulation2), ...]
routines[m[1].size].call

答案 1 :(得分:1)

取决于你的字符串操作是什么。

您可以通过以下方式确定连续的数量:

string.match(/^(a{1,3}).*/)[1].size

您尚未定义规则,因此我的是:

"a"   - downcase
"aa"  - reverse
"aaa" - swapcase

所以我的代码是:

string.send([:downcase, :reverse, :swapcase][string.match(/^(a{1,3}).*/)[1].size-1])

如果您的规则更复杂,那么您可以将它们定义为类上的方法,并根据返回的数字调用它们。