如何通过Ruby获得特殊字符(如:)之前的句子?

时间:2016-01-12 09:10:43

标签: ruby regex

我需要从完整句子中的“:”字符前面得到句子。

离。我有“这条消息将自毁:Ruby很有趣”

我只需要“此消息将自毁”

这是我的方法

def destroy_message(sentence)
    check_list = /[^:]/
    sentence_list = /^([a-zA-z\s]+) \:/

    if sentence =~ check_list
        puts "have :"
        firstConsonant = sentence.match(sentence_list)
        puts firstConsonant
    else
        puts "Not have :"
    end
end

destroy_message("This message will self destruct: Ruby is fun ")

但是我没有得到任何东西。 我该如何解决?

谢谢!

4 个答案:

答案 0 :(得分:4)

我只需要split :处的字符串并使用第一部分。使用复杂的正则表达式引擎可能会更快。

string = "This message will self destruct: Ruby is fun "

string.split(':').first
#=> "This message will self destruct"

答案 1 :(得分:0)

# ruby.rb
def destroy_message(sentence)
  result, * = sentence.split(':')
  unless result == "" # in case ":sentence_case"
    puts "#{result}"
  else
    puts "Not have :"
  end
end
destroy_message("This message will self destruct: Ruby is fun ")

答案 2 :(得分:0)

spickermann的答案会起作用,但除此之外,还有一种方法String#partition专门用于做这种事情(也可能稍快一点)。

s, * = "This message will self destruct: Ruby is fun ".partition(":")
s # => "This message will self destruct"

答案 3 :(得分:-1)

  

puts firstConsonant我什么也没得到。我该如何解决?

您可以使用#Scan Methods

def destroy_message(sentence)
  if sentence.scan(/^[^:]+/)
    puts "have :"
    firstConsonant = sentence.scan(/^[^:]+/)
    puts firstConsonant[0]
  else
    puts "Not have :"
  end
end

destroy_message("This message will self destruct: Ruby is fun")

<强>输出

 => have :
    This message will self destruct

关于使用

的正则表达式的说明
  • ^声称我们处在一条线的起点。
  • [^...]否定字符类,它匹配任何字符,但不匹配特定字符类中的字符。
  • 在char类之后
  • +将重复char类一次或多次。