0

存在这个列表:

 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

预先感谢您的任何帮助!

4

2 回答 2

2
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"
]
于 2013-11-13T07:08:01.893 回答
0

这是非正则表达式版本。打字多一点,更容易理解:

options = ->line{ line.strip.start_with? '-c' }

option_list = text.lines.chunk(&options)
    .select{|is_option,_| is_option}
    .map(&:last)
于 2013-11-13T08:07:34.873 回答