2015-11-27 5 views
1

У меня есть строка, например так:заменяющие charachters, но не последний

str = 'TEST;NAME=1;TARGET_SOMETHING;PLATFORM_INTEL;' 

Теперь я хотел бы заменить все ";" с "-D" и удалить последний ";"

я делаю это с:

str.gsub(/;/, ' -D').gsub(/^/, ' -D') 

второй gsub только добавить -D также к беги пп линии

Результат:

-DTEST -DNAME=1 -DTARGET_SOMETHING -DPLATFORM_INTEL -D 

Как сказать Руби не выводить последний "-D" или удалить в str последнюю ";"?

Любые предложения сделать это в одной строке?

ответ

0
elements= (str.gsub(/;/, ' -D').gsub(/^/, ' -D')).split(' ') 

выход будет:

["-DTEST", "-DNAME=1", "-DTARGET_SOMETHING", "-DPLATFORM_INTEL", "-D"] 

затем удалить последний элемент из массива:

elements.delete_at(elements.size-1) 

выход будет в элементах переменных

p elements 

["-DTEST", "-DNAME=1", "-DTARGET_SOMETHING", "-DPLATFORM_INTEL"] 
3

Вы можете комбинировать split и map для этого.

irb(main):012:0> str.split(";").map {|i| "-D#{i}"}.join(" ") 
=> "-DTEST -DNAME=1 -DTARGET_SOMETHING -DPLATFORM_INTEL" 
Смежные вопросы