如何从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]}