假设我有:
[24] pry(main)> str="these (are) things (that) I want (to) know"
我想要
=> ["these", "things", "I want", "know"]
但是
[25] pry(main)> str.split(/(.*)/)
我得到:
=> ["these ", " know"]
[26] pry(main)>
我该如何解决?抱歉,有多个问题 - 有点分开的问题。
编辑#1
由于我们要在正则表达式上拆分,是否有任何方法可以将匹配的元素恢复?喜欢:
=>[这些东西"我想要"
第一部分是分裂的值,第二部分是匹配的数组?
通过将?
放置在其之后,使*
量词不差不平化。喜欢:
str.split(/(.*?)/)
没有?
的.*
,而您想要相反的效果。
您还可以使用其他方法并限制要匹配的字符。例如:
str.split(/([^()]*)/)
non Regexp版本:
s = "these (are) things (that) I want (to) know"
is_parenthesised = -> x {x.start_with?('(') && x.end_with?(')')}
p s.split(' ').partition &is_parenthesised #=> [["(are)", "(that)", "(to)"], ["these", "things", "I", "want", "know"]]
这是另一种方法:
[str.gsub(/s*(.*?)s*/, 0.chr).split(0.chr), str.scan(/((.*?))/).flatten]
#=> [["these", "things", "I want", "know"], ["(are)", "(that)", "(to)"]]
我可以将gsub
'ED到我确定不在数据中的任何字符串中。ASCII 0似乎是一个安全的选择。split
绝对是第一个元素更好,但我为多样性而提供了这一点。