2013-04-05 32 views
3
mystring = "svn-myapplication" or mystring = "git-myapplication" 

我所需的输出:红宝石字符串处理,除去前3个字符,并把它们添加到字符串的末尾

mystring = "myapplications(svn)" 
mystring = "myapplication(git)" 

问题:字符串的前3个字符应被移动到最后加上括号和“ - ”应该删除。

我试图做这样的事情:

mystring.gsub('svn-','')+"(svn)"但SVN可能是Git的,所以我想用被移动到结束与前三个字符“ - ”删除和括号括起来

回答

9

与A组正则表达式将工作做好:

mystring.gsub(/^([a-z]+)-(\w+)/, '\2(\1)')

2

你可以尝试这样的事情在IRB

1.9.3-p362 :001 > mystring = "svn-myapplication" 

1.9.3-p362 :002 > mystring.gsub(mystring[0,3]+'-','')+(mystring[0,3]) 
4

你可以利用电子正则表达式,但最简单的解决方案如下

mystring = "svn-myapplication" 
puts "#{mystring[4..-1]}(#{mystring[0..2]})" 

myapplication(svn) 
+0

迄今为止最快的解决方案。 – 2013-04-05 11:14:39

+0

@MikeCampbell,为什么'mystring [0..2]'比'mystring [0,3]'快得多? – Mischa 2013-04-05 11:25:50

+0

我的解决方案中有哪些gsub?我们的答案基本上是一样的...... – Mischa 2013-04-05 11:29:28

4

让rock'n'roll :)

mystring = "svn-myapplication" 
mystring.split('-').rotate.join('(') + ')' 
1

我打算提交这个,但至少我可以看到如何做得更好!

def test(s = '') 
    match = /\w+-/.match(s).to_s 
    match = match[0..-2] 
    s.gsub!(/\w+-/, '') 
    s << "(#{match})" 
end # of test