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

求两个C#正则表达式:按空格分割但排除指定特殊字符区间内容

C#正则表达式解决方案

需求1:按空格分割文本,排除[:与:]之间的内容

使用以下正则表达式匹配所有需要保留的片段(通过匹配目标内容而非直接分割实现需求):

@"\[:.*?:\]|[^ ]+"

代码示例

string input1 = "one [two two] three [:four four:] five six [seven seven:] [:eight eight]";
var parts1 = Regex.Matches(input1, @"\[:.*?:\]|[^ ]+")
                  .Cast<Match>()
                  .Select(m => m.Value)
                  .ToArray();

输出结果

one
[two
two]
three
[:four four:]
five
six
[seven
seven:]
[:eight
eight]

正则说明

  • \[:.*?:\]:匹配以[:开头、:]结尾的完整片段(非贪婪模式确保只匹配到最近的:]),保留其中的空格。
  • [^ ]+:匹配任意连续非空格字符,实现对其他区域按空格分割。

需求2:按空格分割文本,排除[:与:]、[与]之间的内容

使用以下正则表达式:

@"\[:.*?:\]|\[(?!:).*?\]|[^ ]+"

代码示例

string input1 = "one [two two] three [:four four:] five six [seven seven:] [:eight eight]";
var parts2 = Regex.Matches(input1, @"\[:.*?:\]|\[(?!:).*?\]|[^ ]+")
                  .Cast<Match>()
                  .Select(m => m.Value)
                  .ToArray();

输出结果

one
[two two]
three
[:four four:]
five
six
[seven
seven:]
[:eight
eight]

正则说明

  • \[:.*?:\]:同需求1,保留[:...:]内的空格。
  • \[(?!:).*?\]:匹配以[开头但紧跟的不是:的完整[...]片段(非贪婪模式匹配到最近的]),保留其中的空格。
  • [^ ]+:同需求1,分割其他区域的空格。

原代码问题分析

你之前使用的正则@"[[::]].+?[\[::]]|[^ ]+"存在逻辑错误:

  • [[::]]是字符类,仅匹配单个[或:字符,而非完整的[:开头标识。
  • .+?[\[::]]会匹配任意字符直到遇到[、:或],导致错误地将[two two] three [:four four:]合并为一个片段。

内容的提问来源于stack exchange,提问作者Anil Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 18:05:22