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" 

“+”匹配一个或多个前面的字符。所以在这种情况下,它匹配任何数字中的一个或多个,后跟“_”

于 2013-09-30T10:22:55.637 回答
1

您可以使用String#trString#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 回答