如何拆分包含分隔符和转义分隔符的字符串?

sv.*_*sv. 4 ruby regex

我的字符串分隔符是;.分隔符在字符串中转义为\;.例如,

irb(main):018:0> s = "a;b;;d\\;e"
=> "a;b;;d\\;e"
irb(main):019:0> s.split(';')
=> ["a", "b", "", "d\\", "e"]
Run Code Online (Sandbox Code Playgroud)

有人可以建议我正则表达式,所以分裂的输出将是["a", "b", "", "d\\;e"]?我正在使用Ruby 1.8.7

Dav*_*ton 6

1.8.7没有Oniguruma(可以编译)没有负面的观察.

1.9.3; 好极了:

> s = "a;b;c\\;d"
=> "a;b;c\\;d"
> s.split /(?<!\\);/
=> ["a", "b", "c\\;d"]
Run Code Online (Sandbox Code Playgroud)

1.8.7与Oniguruma不提供一个简单的拆分,但你可以得到匹配偏移和拉开子的方式.我假设有一个更好的方法来做到这一点我不记得了:

> require 'oniguruma'
> re = Oniguruma::ORegexp.new "(?<!\\\\);"
> s = "hello;there\\;nope;yestho"
> re.match_all s
=> [#<MatchData ";">, #<MatchData ";">]
> mds = re.match_all s
=> [#<MatchData ";">, #<MatchData ";">]
> mds.collect {|md| md.offset}
=> [[5, 6], [17, 18]]
Run Code Online (Sandbox Code Playgroud)

其他选择包括:

  • 分割;和后处理结果寻找尾随\\,或
  • 执行char-by-char循环并保持一些简单状态并手动拆分.