根据空格拆分字符串但忽略引号中的字符串

时间:2015-04-07 10:46:14

标签: c# regex

我想要基于白色分割字符串但是我知道我的字符串的某些部分将在引号中并且其中会有空格,所以我不希望它分割字符串用双引号括起来。

        if (file == null) return;
        else
        {
            using (StreamReader reader = new StreamReader(file))
            {
                string current_line = reader.ReadLine();
                string[] item;
                do
                {
                    item = Regex.Split(current_line, "\\s+");
                    current_line = reader.ReadLine();
                    echoItems(item);
                }
                while (current_line != null);

            }
        }

即使它被引用,分裂将在上面拆分将分开,例如" Big town"变成我的阵列:

0:"大

1:town"

编辑:在尝试@vks回答后,我只能让IDE接受所有引号:Regex.Split(current_line, "[ ](?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");

项目是一个数组,我的打印方法放置一个" []"在打印出数组内容时围绕每个元素。这是我的输出:

[0  0   0   1   2   1   1   1   "Album"                 6   6   11  50  20  0   0   0   40  40  0   0   0   1   1] [] [1] [] [1] [] [1] [] [1] [] [1] [] [1] [] [1  0   0   1   3   1   1   1   "CD case"               3   3   7   20  22  0   0   0   60  0   0   0   0   1   1] [] [1] [] [1] [] [1] [] [1] [] [1] [] [1]

正如您在拆分后所看到的那样,当每个字符串都被分解时,它会将大部分字符串放入单个元素中。

以下是我尝试拆分的文件中的一行:

0   0   0   1   2   1   1   1   "CD case"                   6   6   11  50  20  0   0   0   40  40  0   0   0   1   1  1  1  1  1  1  1

1 个答案:

答案 0 :(得分:3)

[ ](?=(?:[^"]*"[^"]*")*[^"]*$)

由此分开。参见演示。

https://regex101.com/r/sJ9gM7/56

这基本上说[ ] ==捕获一个空格。

(?=..)前瞻,如果它前面有"个偶数。前面有"somehing"个组。但它不应该有一个奇怪的"

string strRegex = @"[ ](?=(?:[^""]*""[^""]*"")*[^""]*$)";
Regex myRegex = new Regex(strRegex, RegexOptions.Multiline);
string strTargetString = @"asdasd asdasd asdasdsad ""asdsad sad sa d sad""     asdasd asdsad "" sadsad asd sa dasd""";

return myRegex.Split(strTargetString);