如何从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)/) 我希望可以得到一个数组,在其中可以输入第一个条目,但是不幸的是,我正在 [\“ \”,\“ 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]}
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...