问题描述
|
我有一组字符串,并且我尝试删除正则表达式匹配的最后一次出现之后的所有内容。
样本数据
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
因此,从本质上讲,删除最后一场比赛之后的所有东西,然后如果它们是结尾的\'-\'我正在尝试删除它。
我计算出是否将其放入数组中,可以取第一个值,然后删除尾随的\'-\'(如果存在)。
关于我在做什么错的任何建议吗?为什么我没有找回前缀?
有一个更好的方法吗?
解决方法
试试这个正则表达式:
(\\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\",\"30402113\"]
=> [\"23401BK221\",\"30402113\"]
ruby-1.9.2-p180 :002 > data.each {|d| p d.split(/(\\w+).*(BK|BZ|113)/)[1]}
\"23401\"
\"23430\"
\"1004113\"
\"14989r\"
\"30402\"
常规链接: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]}