0

Rails アプリで、キーと値を含むファイルを読み込んでいます。インデックス番号がキー名に埋め込まれていますが、それを削除したいと思います。

したがって、以下のサンプル データでは、次のように変換します。

  • PRIMER_LEFT_1_END_STABILITYの中へPRIMER_LEFT_END_STABILITY
  • PRIMER_RIGHT_1_END_STABILITYの中へPRIMER_RIGHT_END_STABILITY
  • PRIMER_PAIR_1_COMPL_ANY_THの中へPRIMER_PAIR_COMPL_ANY_TH

サンプルデータ

PRIMER_LEFT_1_END_STABILITY=7.2000

PRIMER_RIGHT_1_END_STABILITY=7.9000

PRIMER_PAIR_1_COMPL_ANY_TH=0.00

編集

最初の回答をくれた @tihom に感謝します。部分的には機能していますが、埋め込まれた整数が任意の値になるとは指定していません。長さが 1 桁を超える場合、正規表現は失敗します。

1.9.3-p327 :003 > "PRIMER_LEFT_221_END_STABILITY".sub(/_\d/,"")
 => "PRIMER_LEFT21_END_STABILITY"
1.9.3-p327 :004 > "PRIMER_LEFT_21_END_STABILITY".sub(/_\d/,"")
 => "PRIMER_LEFT1_END_STABILITY"
4

2 に答える 2

1

最初のオカレンスを削除するには、subelse を使用してすべてのオカレンスを削除します。gsub

"PRIMER_LEFT_1_END_STABILITY".sub(/_(\d)+/,"") # => "PRIMER_LEFT_END_STABILITY" 

「+」は、先行する 1 つ以上の文字に一致します。したがって、この場合、「_」が後に続く任意の数字の 1 つ以上と一致します。

于 2013-09-30T10:22:55.637 に答える
1

String#trおよびString#squeeze以下のように使用できます。

ar=['PRIMER_LEFT_1_END_STABILITY','PRIMER_RIGHT_1_END_STABILITY','PRIMER_PAIR_1_COMPL_ANY_TH']
p ar.map{|s| s.tr('0-9','').squeeze("_")}
# => ["PRIMER_LEFT_END_STABILITY", "PRIMER_RIGHT_-END_STABILITY", "PRIMER_PAIR_COMPL_ANY_TH"]


ar=["PRIMER_LEFT_221_END_STABILITY","PRIMER_LEFT_21_END_STABILITY"]
p ar.map{|s| s.tr('0-9','').squeeze("_")}
# => ["PRIMER_LEFT_END_STABILITY", "PRIMER_LEFT_END_STABILITY"]
于 2013-09-30T10:34:05.230 に答える