如何获得Ruby的特殊字符(如:)前面的句子?
我需要从完整的句子中得到“:”字符之前的句子 我有“这条信息会自毁:Ruby很有趣” 我只需要“这条消息会自毁” 这是我的方法如何获得Ruby的特殊字符(如:)前面的句子?,ruby,regex,Ruby,Regex,我需要从完整的句子中得到“:”字符之前的句子 我有“这条信息会自毁:Ruby很有趣” 我只需要“这条消息会自毁” 这是我的方法 def destroy_message(sentence) check_list = /[^:]/ sentence_list = /^([a-zA-z\s]+) \:/ if sentence =~ check_list puts "have :" firstConsonant = sentence.match
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 ")
但我从第一辅音中什么也没得到。
我怎样才能修好它
谢谢 我只需在
:
处拆分字符串,并使用第一部分。这可能比使用复杂的regexp引擎更快
string = "This message will self destruct: Ruby is fun "
string.split(':').first
#=> "This message will self destruct"
斯皮克曼的答案是可行的,但除此之外,还有一种方法String#partition
专门用于做这类事情(也可能稍微快一点)
我从第一辅音中什么也没有得到。我怎样才能修好它
你可以用
输出
=> have :
This message will self destruct
关于使用的正则表达式的解释
^
断言我们处于一行的开头
[^…]
与任何字符匹配但不匹配该特定字符类中存在的字符的求反字符类
+
在char类之后,将重复char类一次或多次
无法使用“此消息将自毁:Ruby很有趣”。split(':')[0]
=>“此消息将自毁”
您可以通过将2
作为split
的第二个参数来提高性能。您还可以使用string.lazy.split(:”)。第一个
与换行有什么关系?虽然这可能有效,但与目前发布的其他方法相比,速度要慢得多。当发布一个更复杂的答案时,通常是为了逻辑清晰或性能,但从这个答案中,没有什么好处。@sawa我同意,但由于问题是关于编写自己的方法,而不是使用rubies内置方法,提问者也希望了解给定代码的问题。
s, * = "This message will self destruct: Ruby is fun ".partition(":")
s # => "This message will self destruct"
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