我有一组字符串,我试图删除所有内容,包括最后一次正则表达式匹配。
Sample Data 23401BK221 23430-BZ-221 1004113-BK-3 14989r-113 30402113
我试图用
做这件事extensions_to_remove="BK|BZ|113" sample_data = sample_data.split(/.*(#{extensions_to_remove}$1)/)
我希望我能得到一个阵列,我可以拿第一个条目,但不幸的是,我得到了
["","BK", "-221"] ["","BZ","-221"] ["","BK", "-3"] ["","113"] ["", "113"]
我希望得到的是
23401 23430 1004113 14989r 30402
所以基本上在最后一场比赛后删除了everthing,然后如果他们是一个尾随' - '我试图删除它。
我想如果我把它放到一个数组中,我可以取第一个值,然后去掉尾随的' - ',如果它存在的话。
有关我做错的任何建议吗?为什么我没有收到前缀? 有更好的方法吗?
答案 0 :(得分:2)
一步不使用split
。
sample_data = %w[
23401BK221
23430-BZ-221
1004113-BK-3
14989r-113
30402113
]
sample_data = sample_data.map{|s| s[/(.*[^-])-?(?:BK|BZ|113)/, 1]}
答案 1 :(得分:1)
试试这个正则表达式:
(\w+).*(BK|BZ|113)
代码:
data = ["23401BK221", "23430-BZ-221", "1004113-BK-3", "14989r-113", "30402113"]
data.each {|d| p d.split(/(\w+).*(BK|BZ|113)/)[1]}
输出:
gazler@gazler-desktop:~$ ruby -v
ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-linux]
gazler@gazler-desktop:~$ irb
ruby-1.9.2-p180 :001 > data = ["23401BK221", "23430-BZ-221", "1004113-BK-3", "14989r-113", "30402113"]
=> ["23401BK221", "23430-BZ-221", "1004113-BK-3", "14989r-113", "30402113"]
ruby-1.9.2-p180 :002 > data.each {|d| p d.split(/(\w+).*(BK|BZ|113)/)[1]}
"23401"
"23430"
"1004113"
"14989r"
"30402"
Rubular链接:http://rubular.com/r/kKrseNE7ZX