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 函数? [关闭]