"a;b;;d\\;e" irb(main):019:0> s.s-6ren">
gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 07:26:06 25 4
gpt4 key购买 nike

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

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

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

最佳答案

1.8.7 在没有 Oniguruma 的情况下没有负面回顾(可能会编译进去)。

1.9.3;耶:

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

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]]

其他选项包括:

  • 拆分 ; 并对结果进行后处理以查找尾随 \\,或者
  • 做一个逐个字符的循环并维护一些简单的状态,然后手动拆分。

关于ruby - 如何拆分包含分隔符和转义分隔符的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11164236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com