" #"
または" Apt"
の最初のインスタンスまで文字列の部分をどのように返しますか?Rubyで一致する文字列までの文字列を返します
文字列を"#"
または"Apt"
に基づいて配列に分割し、次に.first
を呼び出すことができますが、より簡単な方法が必要です。
" #"
または" Apt"
の最初のインスタンスまで文字列の部分をどのように返しますか?Rubyで一致する文字列までの文字列を返します
文字列を"#"
または"Apt"
に基づいて配列に分割し、次に.first
を呼び出すことができますが、より簡単な方法が必要です。
文字列の分割は間違いなく簡単であり、正規表現よりも読みやすくなっています。正規表現の場合、最初の一致を取得するにはキャプチャグループが必要です。文字列分割と同じです
string.split(/#|Apt/).first
最初の結果だけが必要なので、少なくとも2つの引数を 'split'に渡すことは意味があります。そうしないと、必要以上に多くの作業が行われる可能性があります。 –
私はすべてのことずっとRubyで書いていないが、私はあなたがトークナイザに文字列を入れた場合、あなたはできる、
^.*(#|Apt)
の線に沿って、正規表現を使用するか、または可能性が確信していますそれを使って何かをするのですが、ただのキャラクターだけではなく、言葉を探していると考えると厳しいでしょう。
String#[]メソッドを使用してください。このように:
[
'#foo',
'foo#bar',
'fooAptbar',
'asdfApt'
].map { |str| str[/^(.*)(#|Apt)/, 1] } #=> ["", "foo", "foo", "asdf"]
私はそれを明確にする方法を書いています。たとえば、次のようなものがあります。
class String
def substring_until(substring)
i = index(substring)
return self if i.nil?
i == 0 ? "" : self[0..(i - 1)]
end
end
なぜ簡単ではないのですか? –