2011-09-23 12 views
11

" #"または" Apt"の最初のインスタンスまで文字列の部分をどのように返しますか?Rubyで一致する文字列までの文字列を返します

文字列を"#"または"Apt"に基づいて配列に分割し、次に.firstを呼び出すことができますが、より簡単な方法が必要です。

+0

なぜ簡単ではないのですか? –

答えて

21

文字列の分割は間違いなく簡単であり、正規表現よりも読みやすくなっています。正規表現の場合、最初の一致を取得するにはキャプチャグループが必要です。文字列分割と同じです

string.split(/#|Apt/).first 
+3

最初の結果だけが必要なので、少なくとも2つの引数を 'split'に渡すことは意味があります。そうしないと、必要以上に多くの作業が行われる可能性があります。 –

1

私はすべてのことずっとRubyで書いていないが、私はあなたがトークナイザに文字列を入れた場合、あなたはできる、

^.*(#|Apt) 

の線に沿って、正規表現を使用するか、または可能性が確信していますそれを使って何かをするのですが、ただのキャラクターだけではなく、言葉を探していると考えると厳しいでしょう。

2

String#[]メソッドを使用してください。このように:

[ 
    '#foo', 
    'foo#bar', 
    'fooAptbar', 
    'asdfApt' 
].map { |str| str[/^(.*)(#|Apt)/, 1] } #=> ["", "foo", "foo", "asdf"] 
3

私はそれを明確にする方法を書いています。たとえば、次のようなものがあります。

class String 
    def substring_until(substring) 
     i = index(substring) 
     return self if i.nil? 
     i == 0 ? "" : self[0..(i - 1)] 
    end 
end 
関連する問題