如何从regexp返回字符串前缀

时间:2011-05-25 18:58:22

标签: ruby regex

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

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,然后如果他们是一个尾随' - '我试图删除它。

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

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

2 个答案:

答案 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