我有一个字符串(多行),我需要获取2个给定字符串之间的字符串。
例如:
multiline_string = %q{testtestbegin
test1
test2
test3
end
test
xxx
xxx
begin
yyy
yyy
end
hhh
}
我需要找到'begin'和'end'之间的字符串。有2场比赛。我需要打印这两个。
有没有办法在像(?<=begin)(.*)(?=end)
这样的正则表达式中执行此操作
请帮助。
答案 0 :(得分:7)
r = /
(?<=begin\n) # match 'begin' followed by a newline in a positive lookbehind
.*? # match any number of any character, lazily
(?=end\n) # match 'end' follwed by a newline in a positive lookahead
/mx # multiline and free-spacing regex definition modes
arr = multiline_string.scan(r)
#=> ["test1\ntest2\ntest3\n", "yyy\nyyy\n"]
arr.each { |s| puts s }
test1
test2
test3
yyy
yyy
答案 1 :(得分:1)
只是为了好玩:
text = 'testtestbegin
test1
test2
test3
end
test
xxx
xxx
begin
yyy
yyy
end
hhh
'
p text.split(/(begin|end)/)
.each_cons(3)
.select do |a, _, c|
a == 'begin' && c == 'end'
end.map { |_, w, _| w }
# ["\ntest1\ntest2\ntest3\n", "\nyyy\nyyy\n"]