gpt4 book ai didi

c# - 解析包含数组的字符串

转载 作者:太空狗 更新时间:2023-10-29 17:51:07 27 4
gpt4 key购买 nike

我想将包含递归字符串数组的字符串转换为深度为 1 的数组。

例子:

StringToArray("[a, b, [c, [d, e]], f, [g, h], i]") == ["a", "b", "[c, [d, e]]", "f", "[g, h]", "i"]

看起来很简单。但是,我来自函数背景,我对 .NET Framework 标准库不是很熟悉,所以每次(我从头开始大约 3 次)我最终都只是丑陋的代码。我的最新实现是 here .如您所见,它丑得要命。

那么,C# 的方法是什么?

最佳答案

@ojlovecd 有一个很好的答案,使用正则表达式。
但是,他的回答过于复杂,所以这是我类似的、更简单的回答。

public string[] StringToArray(string input) {
var pattern = new Regex(@"
\[
(?:
\s*
(?<results>(?:
(?(open) [^\[\]]+ | [^\[\],]+ )
|(?<open>\[)
|(?<-open>\])
)+)
(?(open)(?!))
,?
)*
\]
", RegexOptions.IgnorePatternWhitespace);

// Find the first match:
var result = pattern.Match(input);
if (result.Success) {
// Extract the captured values:
var captures = result.Groups["results"].Captures.Cast<Capture>().Select(c => c.Value).ToArray();
return captures;
}
// Not a match
return null;
}

使用这段代码,您会看到 StringToArray("[a, b, [c, [d, e]], f, [g, h], i]") 将返回以下数组:["a", "b", "[c, [d, e]]", "f", "[g, h]", "i"].

有关我用于匹配平衡括号的平衡组的更多信息,请查看 Microsoft's documentation .

更新:
根据评论,如果你还想平衡报价,这里有一个可能的修改。 (请注意,在 C# 中," 被转义为 "")我还添加了模式描述以帮助阐明它:

    var pattern = new Regex(@"
\[
(?:
\s*
(?<results>(?: # Capture everything into 'results'
(?(open) # If 'open' Then
[^\[\]]+ # Capture everything but brackets
| # Else (not open):
(?: # Capture either:
[^\[\],'""]+ # Unimportant characters
| # Or
['""][^'""]*?['""] # Anything between quotes
)
) # End If
|(?<open>\[) # Open bracket
|(?<-open>\]) # Close bracket
)+)
(?(open)(?!)) # Fail while there's an unbalanced 'open'
,?
)*
\]
", RegexOptions.IgnorePatternWhitespace);

关于c# - 解析包含数组的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7961580/

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