C# 中的 Regex.Split 帮助

发布于 2024-11-08 13:05:03 字数 171 浏览 1 评论 0原文

我有这个字符串:

A,B,C[D,E,F[G,H,J[I]],K,L[M,N] 

使用 Regex.Split() 我需要一个像这样划分的结果:

A,B
C[D,E]
F[G,H]
J[I]
K
L[M,N]

I have this string:

A,B,C[D,E,F[G,H,J[I]],K,L[M,N] 

And with Regex.Split() i need a result divided like this:

A,B
C[D,E]
F[G,H]
J[I]
K
L[M,N]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

暖树树初阳… 2024-11-15 13:05:03

我不确定是否可以纯粹使用正则表达式来完成此操作(如果可能的话,我怀疑所需的正则表达式将非常复杂)。

这是一种替代方案,尽管完全跳过正则表达式并手动解析所有内容可能会更好:

string yourString = "A,B,C[D,E,F[G,H,J[I]],K,L[M,N]";

var parts = Regex.Split(yourString, @",(?=[^,\[]+\[)|\]+,?")
                 .Where(s => s.Length > 0)
                 .Select(s => s.Contains("[") ? s + "]" : s);

I'm not sure if you can do this purely with a regular expression (and if it is possible then I suspect that the required regex would be hellishly complex).

Here's one alternative, although it might be better to skip the regex entirely and parse everything manually:

string yourString = "A,B,C[D,E,F[G,H,J[I]],K,L[M,N]";

var parts = Regex.Split(yourString, @",(?=[^,\[]+\[)|\]+,?")
                 .Where(s => s.Length > 0)
                 .Select(s => s.Contains("[") ? s + "]" : s);
硬不硬你别怂 2024-11-15 13:05:03

试试这个:

Regex re = new Regex(@"((?:\w+)\[(?:(?:\w+\b,?)(?!\[))+)");

var result = re.Split(str.Replace(" ", ""))
               .Select(s => s.TrimEnd(',', '[').TrimStart(']', ','))
               .Where(s => !string.IsNullOrEmpty(s));

Try this:

Regex re = new Regex(@"((?:\w+)\[(?:(?:\w+\b,?)(?!\[))+)");

var result = re.Split(str.Replace(" ", ""))
               .Select(s => s.TrimEnd(',', '[').TrimStart(']', ','))
               .Where(s => !string.IsNullOrEmpty(s));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文