在Rails应用程序中,我正在读取一个带有键/值的文件。在键名中嵌入了一个索引号,我想删除它,以及一个间距下划线。
因此,在下面的示例数据中,我想转换:
PRIMER_LEFT_1_END_STABILITY转化为PRIMER_LEFT_END_STABILITYPRIMER_RIGHT_1_END_STABILITY转化为PRIMER_RIGHT_END_STABILITYPRIMER_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"发布于 2013-09-30 10:22:55
要删除第一个事件,请使用sub first删除所有事件,使用gsub
"PRIMER_LEFT_1_END_STABILITY".sub(/_(\d)+/,"") # => "PRIMER_LEFT_END_STABILITY" "+“匹配前面的一个或多个字符。因此,在这种情况下,它匹配任何数字中的一个或多个,后面跟着"_“。
发布于 2013-09-30 10:34:05
您可以使用http://ruby-doc.org/core-2.0.0/String.html#method-i-tr和http://ruby-doc.org/core-2.0.0/String.html#method-i-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"]https://stackoverflow.com/questions/19091687
复制相似问题