gpt4 book ai didi

ruby - 在 Ruby 中拆分字符串,忽略括号的内容?

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

我需要在 Ruby 中将一个字符串拆分成一个部分列表,但我需要忽略参数中的内容。例如:

A +4, B +6, C (hello, goodbye) +5, D +3

我希望结果列表是:

[0]A +4
[1]B +6
[2]C (hello, goodbye) +5
[3]D +3

但我不能简单地用逗号分隔,因为那样会分隔括号中的内容。有没有办法在不将大括号中的逗号预先解析为其他内容的情况下将内容拆分出来?

谢谢。

最佳答案

试试这个:

s = 'A +4, B +6, C (hello, goodbye) +5, D +3'
tokens = s.scan(/(?:\(.*?\)|[^,])+/)
tokens.each {|t| puts t.strip}

输出:

A +4
B +6
C (hello, goodbye) +5
D +3

一个简短的解释:

(?:        # open non-capturing group 1
\( # match '('
.*? # reluctatly match zero or more character other than line breaks
\) # match ')'
| # OR
[^,] # match something other than a comma
)+ # close non-capturing group 1 and repeat it one or more times

另一种选择是仅当向前看时可以看到的第一个括号是左括号(或根本没有括号:即字符串的末尾)时,才在逗号后跟一些空格时拆分:

s = 'A +4, B +6, C (hello, goodbye) +5, D +3'
tokens = s.split(/,\s*(?=[^()]*(?:\(|$))/)
tokens.each {|t| puts t}

将产生相同的输出,但我发现 scan 方法更干净。

关于ruby - 在 Ruby 中拆分字符串,忽略括号的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2015826/

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