基于单词拆分字符串

时间:2014-04-15 06:13:03

标签: ruby regex

我有一个字符串由单词'#'组成。例如'这#是#an#example'我需要根据倒数第二个单词提取最后一个单词或最后两个单词。

如果倒数第二个是' myword'我需要最后两个单词,否则只需要最后一个单词。

'this#is#an#example' => 'example'
'this#is#an#example#using#myword#also' => 'myword#also'

有没有比分裂和检查倒数第二个更好的方法?也许使用正则表达式?

感谢。

2 个答案:

答案 0 :(得分:3)

您可以使用行尾$并使myword#前缀可选:

str = 'this#is#an#example'
str[/(?:#)((myword#)?[^#]+)$/, 1]
#=> "example"

str = 'this#is#an#example#using#myword#also'
str[/(?:#)((myword#)?[^#]+)$/, 1]
#=> "myword#also"

但是,在这种情况下,我认为使用正则表达式并不“更好”。我会使用类似Santosh(已删除)的答案:将行分为#并使用if子句。

def foo(str)
  *, a, b = str.split('#')
  if a == 'myword'
    "#{a}##{b}"
  else
    b
  end
end

答案 1 :(得分:1)

str = 'this#is#an#example#using#myword#also'
array = str.split('#')
array[-2] == 'myword' ? array[-2..-1].join('#') : array[-1]

With regex:

'this#is#an#example'[/(myword\#)*\w+$/]
# => "example"

'this#is#an#example#using#myword#also'[/(myword\#)*\w+$/]
# => "myword#also"