如何将正则表达式限制为Ruby中最接近的



假设我有:

[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绝对是第一个元素更好,但我为多样性而提供了这一点。

最新更新