如何从regexp返回字符串前缀

我有一组字符串,我试图删除所有内容,包括最后一次正则表达式匹配。

样本数据
 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)/)

我希望我能得到一个arrays,我可以拿第一个条目,但不幸的是,我得到了

 [“”,“BK”,“ -  221”]
 [ “”, “BZ”, “ -  221”]
 [“”,“BK”,“ -  3”]
 [ “”, “113”]
 [“”,“113”]

我希望得到的是

 23401
 23430
 1004113
 14989r
 30402

所以基本上在最后一场比赛后删除everthing,然后如果他们是一个尾随’ – ‘我试图删除它。

我想如果我把它放到一个数组中,我可以取第一个值,然后去掉尾随的’ – ‘,如果它存在的话。

关于我做错什么的任何建议? 为什么我没有收到前缀? 有一个更好的方法吗?

试试这个正则表达式:

(\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

一步而不使用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]}