拆分字符串。但忽略[]里面的内容

问题描述 投票:2回答:2

我有一个字符串:

s='articles[zone.id=1].comments[user.status=active].user'

希望分裂(通过split(some_regex_here))。除了括号内的子串之外的每个时期都需要进行拆分。

预期产量:

["articles[zone.id=1]", "comments[user.status=active]", "user"]

我该怎么做?或者除了split()之外还有别的什么,我应该看看?

regex ruby
2个回答
3
投票

试试这个,

s.split(/\.(?![^\[]*\])/)

我得到了这个结果,

2.3.2 :061 > s.split(/\.(?![^\[]*\])/)
=> ["articles[zone.id=1]", "comments[user.status=active]", "user"] 

你也可以在这里测试一下:https://rubular.com/r/LaxEFQZJ0ygA3j


1
投票

我假设问题是拆分不在匹配括号内的句点。

这是一个非正则表达式解决方案,可以使用任意数量的嵌套括号。我假设括号都是匹配的,但检查它并不困难。

def split_it(s)
  left_brackets = 0
  s.each_char.with_object(['']) do |c,a|
    if c == '.' && left_brackets.zero?
      a << '' unless a.last.empty?
    else
      case c
      when ']' then left_brackets -= 1
      when '[' then left_brackets += 1
      end
      a.last << c
    end
  end.tap { |a| a.pop if a.last.empty? }
end

split_it '.articles[zone.id=[user.loc=1]].comments[user.status=active].user'
  #=> ["articles[zone.id=[user.loc=1]]", "comments[user.status=active]", "user"]
© www.soinside.com 2019 - 2024. All rights reserved.