C# Regex.Split,如何将字符串拆分为用括号括起来而不是用括号括起来?

Posted

技术标签:

【中文标题】C# Regex.Split,如何将字符串拆分为用括号括起来而不是用括号括起来?【英文标题】:C# Regex.Split, How do I split string into surrounded by parenthesis and not surrounded by parenthesis? 【发布时间】:2021-09-21 23:01:39 【问题描述】:

给定字符串"I'm not surrounded by parenthesis (but I am) so what.",我将如何使用正则表达式将其拆分为如下所示的string[][0] = "I'm not surrounded by parenthesis " [1] = "(but I am)" [2] = " so what."

或者,有没有办法用相同的字符串替换(but I am),但被标签包围?比如[b](but I am)[/b]

我尝试使用 Regex.Replace 方法,将\(([^\)]+)\) 用作正则表达式。但我需要方法参数中的替换字符串。鉴于替换字符串应该与 RegEx 匹配,我不太清楚如何执行此方法。

【问题讨论】:

您可以edit 问题而不是在评论中添加信息。是的,这绝对是可能的,但你有没有先尝试过?我们希望看到您在询问之前先尝试一下 - 您通常会通过这种方式了解更多信息。 好吧,当我在这里发帖时,是因为我自己想不出答案。我确实尝试过研究,但找不到合适的技术来做到这一点。朝着正确的方向友好地轻推会很好......但如果那不可能,我会继续尝试。 我并不是要您自己回答,而是要在询问之前解释您尝试过的内容。我看到您现在将其准确地添加到了问题中,这很好。这为我们提供了一些可以合作的东西,并且更容易给出答案,这样您就可以更轻松地查看您错过了什么或哪里出错了。 我知道下次我会更具体。 【参考方案1】:

对于您的第一个问题,this 应该会给您您想要的:

(\([^)]+?\)|[^(]+)

请确保您使用Regex.Matches,而不是Regex.Match,因为它会为每个括号和非括号组返回一个匹配项。

对于你的第二个问题,像这样的简单调用应该可以做到:

string s = ...;
Regex.Replace(s, @"\([^)]+?\)", @"[b]$1[/b]");

【讨论】:

非常感谢。 所以只是为了澄清。 $1 是“正则表达式中的替换”对吗? 它代替了第一次捕获,是的

以上是关于C# Regex.Split,如何将字符串拆分为用括号括起来而不是用括号括起来?的主要内容,如果未能解决你的问题,请参考以下文章

Java string.split 与 C# Regex.split - 限制为一定数量的字段

如何将分隔符数组传递给 Regex.Split 函数? [关闭]

C# 正则表达式匹配与拆分相同的字符串

如何保留 Regex.Split 的分隔符?

如何使用 regex.split 在 c# 中解析 html 并返回值数组

正则表达式 .net 拆分