繁体   English   中英

使用Regex和VB.NET在多个空格上分割字符串

[英]Splitting a string on a number of whitespaces using Regex and VB.NET

我有一个以下格式的表:

col1   col2   col3   col4  col5  col6
test   300     25.5   14   345   11
test2           100   23   11    203
test3  31                  44    175

因此,即使设置了列数并且对齐了列,某些列也可以为空白。 列之间的间隔至少为2个空格字符。 所以我正在使用:

If Regex.Split(line, "[ ]{2,}").Length = 6 Then
  sw.WriteLine("col1: " & Regex.Split(line, "[ ]{2,}")(0))
  sw.WriteLine("col2: " & Regex.Split(line, "[ ]{2,}")(1))
  sw.WriteLine("col3: " & Regex.Split(line, "[ ]{2,}")(2))
  sw.WriteLine("col4: " & Regex.Split(line, "[ ]{2,}")(3))
  sw.WriteLine("col5: " & Regex.Split(line, "[ ]{2,}")(4))
  sw.WriteLine("col6: " & Regex.Split(line, "[ ]{2,}")(5))                          
End If

在捕获每一行并将其写入流编写器的循环中。

如果某些列值不丢失,它将很好地工作。 在上面的示例中,第一行可以正常运行,但是对于第二行和第三行, Regex.Split(line, "[ ]{2,}").Length将分别返回5和4。 有解决方法吗? 我想要Regex.Split(line, "[ ]{2,}").Length返回6作为列数,并用空格填充数组的相应部分。

我不确定您的预期输出是什么,尽管为分割的空间设置最大数量应该可以:

string[] s = Regex.Split(line, @"\s{2,6}");

码:

    string line;
    while ((line = Console.ReadLine()) != null) {

        // Console.WriteLine(line); // original output

        string[] s = Regex.Split(line, @"\s{2,6}");

        int i = 0;
        foreach (string word in s) {
            i++;
            Console.WriteLine("col"+i+": " + word);
        }
    }

例:

http://ideone.com/0lZLk1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM