You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

字符串按空格拆分时,如何避免拆分括号内的大写内容?

解决方案:按空格拆分但保留括号内大写内容

嘿,这个需求我太熟悉了!普通的Split(' ')会把所有空格一刀切,肯定没法保留(TAKE SOT)这种带空格的括号内容。咱们可以用正则表达式来精准控制拆分逻辑,这里给你两种靠谱的实现方式:

方法一:直接匹配所有需要保留的「内容块」

这种思路更直观——不找分隔符,反而找出所有我们想要保留的单元:要么是括号内的大写内容(含空格),要么是其他非空格的连续字符。

代码示例

string content = "Tonight the warning from the Police commissioner as they crack down on anyone who leaves there house without a 'reasonable excuse' (TAKE SOT)";
// 正则规则:匹配括号内的大写字母+空格,或者非空格的连续字符
var blockRegex = new Regex(@"\([A-Z\s]+\)|[^ ]+");
var contentList = blockRegex.Matches(content)
                           .Cast<Match>()
                           .Select(match => match.Value)
                           .ToArray();

效果说明

运行后contentList里的元素会是:
Tonight, the, warning, ..., 'reasonable, excuse', (TAKE SOT)
完美保留了括号内的完整内容!如果你的括号内内容不只是大写,还想兼容其他字符,可以把正则改成@"\([^)]+\)|[^ ]+"——这样会匹配从左括号到右括号之间的所有内容,不管是什么字符。

方法二:仅拆分括号外的空格

另一种思路是精准定位「可以拆分的空格」——也就是那些不在括号范围内的空格,用它们作为分隔符来拆分字符串。

代码示例

string content = "Tonight the warning from the Police commissioner as they crack down on anyone who leaves there house without a 'reasonable excuse' (TAKE SOT)";
// 正则规则:匹配不在括号内的空格
var splitRegex = new Regex(@"(?![^(]*\)) ");
var contentList = splitRegex.Split(content);

正则解释

(?![^(]*\))是一个正向否定预查,它的意思是:当前空格的后面,不会出现「先有一堆非左括号字符,再出现右括号」的情况——换句话说,这个空格不在括号里面,所以可以安全拆分。

注意事项

  • 如果你的字符串里有嵌套括号(比如(TAKE (SOT) NOW)),上面的正则需要调整,不过针对你给出的单层括号场景完全够用;
  • 可以根据实际需求修改正则规则,比如适配不同类型的括号([]/{})或者内容格式。

内容的提问来源于stack exchange,提问作者Jayoti Parkash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 20:33:10