存在这个列表:
blablabla
-c option1
-c option2
-c option3
blablablabla
-c option4
-c option5
-c option6
如何将以下内容提取为块?
1)
-c option1
-c option2
-c option3
2)
-c option4
-c option5
-c option6
预先感谢您的任何帮助!
s = <<_
blablabla
-c option1
-c option2
-c option3
blablablabla
-c option4
-c option5
-c option6
_
s.scan(/(?:^ -c .*#$/)+/)
# => [
" -c option1\n -c option2\n -c option3 \n",
" -c option4\n -c option5\n -c option6\n"
]
或者
s.split(/^(?! -c ).*/).drop(1)
# => [
" -c option1\n -c option2\n -c option3 \n",
" -c option4\n -c option5\n -c option6\n"
]
这是非正则表达式版本。打字多一点,更容易理解:
options = ->line{ line.strip.start_with? '-c' }
option_list = text.lines.chunk(&options)
.select{|is_option,_| is_option}
.map(&:last)