Regex.Split和string.Split无法按预期工作

时间:2013-08-01 20:01:41

标签: c# regex split

我试图用'?'来分割字符串作为分隔符。我的代码从CSV文件读取数据,并且C#无法识别某些符号(如分数),因此我尝试用相关的数据替换它们(在这种情况下为债券优惠券)。我在下面的代码(嵌入在索引变量为i的循环中)中有print语句来测试输出:

string[] l = lines[i][1].Split('?');               
//string[] l = Regex.Split(lines[i][1], @"\?");

System.Console.WriteLine("L IS " + l.Length.ToString() + " LONG");
for (int j = 0; j < l.Length; j++)
    System.Console.WriteLine("L["+ j.ToString() + "] IS " + l[j]);

if (l.Length > 1)
{
    double cpn = Convert.ToDouble(lines[i][12]);
    string couponFrac = (cpn - Math.Floor(cpn)).ToString().Remove(0,1);
    lines[i][1] = l[0].Remove(l[0].Length-1) + couponFrac + l[1]; // Recombine, replacing '?' with CPN
}

问题在于,两种拆分方法(string.Split()Regex.Split())都会产生不一致的结果,其中一些字符串元素在行中正确分割而其他字符串元素根本没有拆分(因此问号是仍然在字符串中)。

有什么想法?我看过关于拆分方法的类似帖子,但它们并没有太大帮助。

2 个答案:

答案 0 :(得分:1)

我在解析以下内容时没有遇到任何问题。

var qsv = "now?is?the?time";
var keywords = qsv.Split('?');
keywords.Dump();

代码和输出的屏幕截图...

enter image description here

<强>更新 Split似乎没有任何问题。在其他地方有一个问题,因为在这个小规模的测试中,它工作得很好。我建议你使用 LinqPad 来测试这些小规模的场景。

var qsv = "TII 0 ? 04/15/15";
var keywords = qsv.Split('?');
keywords.Dump();

qsv = "TII 0 ? 01/15/22";
keywords = qsv.Split('?');
keywords.Dump();

新的更新输出:

enter image description here

答案 1 :(得分:1)

使用String.Split我没有问题。你能发布你的输入和输出吗? 如果可以,你可以使用String.Replace替换你想要的'?'使用字符串中没有出现的字符,然后在该字符上使用String.Split将结果字符串拆分为相同的效果。 (只是一试)