marker = "-a"
r =/
#{marker} # match the contents of the variable 'marker'
\s+ # match > 0 whitespace chars
\K # forget everything matched so far
.* # match the rest of the line
/x # free-spacing regex definition mode
#=>/
# -a # match the contents of the variable 'marker'
# \s+ # match > 0 whitespace chars
# \K # forget everything matched so far
# .* # match the rest of the line
# /x
s[r]
#=> "Apple -b Ball -c Chocolate"
しかし、あなたが本当にマーカー
間のテキストだけをしたい場合、私は、値としてキーやテキストなどのマーカーでハッシュを構築します。まず、次の正規表現を使用して文字列を分割します。
r =/
\s* # match >= 0 spaces
\- # match hypen
( # begin capture group 1
[a-z] # match marker
) # end capture group 1
\s* # match >= 0 spaces
/x # free-spacing regex definition mode
h = s.split(r).drop(1).each_slice(2).to_h
#=> {"a"=>"Apple", "b"=>"Ball", "c"=>"Chocolate"}
このハッシュでは、各マーカーのテキストを取得できます。
h["a"]
#=> "Apple"
h["b"]
#=> "Ball"
h["c"]
#=> "Chocolate"
ハッシュを作成する手順は次のとおりです。正規表現でキャプチャグループ内[a-z]
を置くことによって、"a"
、"b"
と"c"
をアレイa
に含まれ、
a = s.split(r)
#=> ["", "a", "Apple", "b", "Ball", "c", "Chocolate"]
注意。 (。String#split、第三段落を参照してください)
b = a.drop(1)
#=> ["a", "Apple", "b", "Ball", "c", "Chocolate"]
c = b.each_slice(2)
#=> #<Enumerator: ["a", "Apple", "b", "Ball", "c", "Chocolate"]:each_slice(2)>
我々は、配列に変換することにより、列挙子c
の要素を見ることができます:
c.to_a
#=> [["a", "Apple"], ["b", "Ball"], ["c", "Chocolate"]]
最後に、
c.to_h
#=> {"a"=>"Apple", "b"=>"Ball", "c"=>"Chocolate"}
だから、「'のために"アップル-cチョコレート-bボール" '、' 'チョコレート-bボール' '(' -c'の後ろのもの)、そうでしょうか? – sawa
番号。私の入力が「-a Apple -c Chocolate -b Ball」の場合、私はまだチョコレートとして-c値だけを読みたいと思っていました。私の懸念は、入力文字列の-cパラメータの位置でした。 – Venkat
これは、 '-c'の後のすべてではありません。 – sawa