Как вернуть префикс строки из регулярного выражения - PullRequest
0 голосов
/ 25 мая 2011

У меня есть группа строк, и я пытаюсь удалить все после, включая последнее вхождение совпадения с регулярным выражением.

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

Так что, по сути, удалите все, что осталось после последнего матча, а затем, если они заканчиваются '-' Я пытаюсьудали это.

Я подумал, что если я получу его в массив, я мог бы взять первое значение, а затем убрать завершающий '-', если он существует.

Любые предложения о том, что я делаю неправильно?Почему я не получаю префиксы обратно?Есть ли лучший способ сделать это?

Ответы [ 2 ]

2 голосов
/ 25 мая 2011

За один шаг без использования 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 голос
/ 25 мая 2011

Попробуйте это регулярное выражение:

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

Рубулярная ссылка: http://rubular.com/r/kKrseNE7ZX

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...