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

如何按空格分割字符串但不拆分单引号内内容?求更简洁实现

有没有更简洁的方式分割单引号内包含空格的字符串?

你遇到的场景确实不能直接用Split方法,因为单引号内的空格需要保留。下面提供两种更简洁的实现方式:

方法一:正则表达式(最简洁)

利用正则可以精准匹配单引号包裹的内容,直接提取所有符合要求的片段:

using System.Text.RegularExpressions;

string text = "'test string' 'hello world'";
var splittedText = Regex.Matches(text, @"'[^']+'")
                        .Cast<Match>()
                        .Select(match => match.Value)
                        .ToList();

正则表达式'[^']+'的含义是:匹配以单引号开头,后续跟着任意非单引号字符,直到遇到闭合单引号的片段,完美适配你的需求。执行后得到的结果就是:

'test string'
'hello world'

方法二:简化版状态机循环

如果不想依赖正则,也可以把你原来的循环逻辑简化,减少冗余代码:

string text = "'test string' 'hello world'";
var splittedText = new List<string>();
int start = 0;
bool inQuote = false;

for (int i = 0; i < text.Length; i++)
{
    if (text[i] == '\'') inQuote = !inQuote;
    if (!inQuote && text[i] == ' ')
    {
        if (i > start) splittedText.Add(text.Substring(start, i - start));
        start = i + 1;
    }
}
// 处理最后一段
if (start < text.Length) splittedText.Add(text.Substring(start));

这个版本修复了原代码中最后一段截取的潜在问题(比如避免多跳过一个字符),同时逻辑更紧凑。

对原代码的小补充

你的原实现思路是对的,但最后一行的Substring(Position + 1, index - Position)可能会在某些边界场景下出问题(比如字符串末尾没有空格时),上面的简化循环已经修正了这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 20:05:19