这是我的文字:
hello foo-1 hello bar $4 hello ...
我需要找到与/hello .*/
匹配的所有内容:
["hello foo-1", "hello bar $4", ...]
要实现此目的,要提供给scan()
的正则表达式是什么?
答案 0 :(得分:3)
使用基于前瞻性正则表达式的split
:
'hello foo-1 hello bar $4 hello'.split(/(?=hello)/)
(?=hello)
正向前瞻会将字符串拆分为字符串中每个hello
前面的位置。
如果您需要摆脱尾随空格(如果有的话),请在模式开始处添加\s*
:
.split(/\s*(?=hello)/)
答案 1 :(得分:0)
这是一个没有正则表达式的替代方案。它使用slice_before
:
"hello foo-1 hello bar $4 hello".split.slice_before("hello").map{|words| words.join(' ')}
# => ["hello foo-1", "hello bar $4", "hello"]
"hello helloween hello halloween".split.slice_before("hello").map{|words| words.join(' ')}
# => ["hello helloween", "hello halloween"]