首页 > 解决方案 > 拆分具有多个拆分字符串的文本文件

问题描述

我正在尝试读取具有空格分隔符和双引号的文本文件,并且没有一种简单的方法来识别这种情况,我只是想检查是否可以使用预定义的正则表达式来实现,否则我需要开始进行自定义拆分

这是字符串

“myfile-一二” “1” 3 1453454.00 -134557.63 585.0 24444.8 -999 “NULL” “” 45.60 “” 67°32'5.23455“N 54°56'65.3454”W “NULL” 6.00

输出应该是

myfile-one two
1
3
1453454.00
-134557.63
585.0
24444.8
-999
NULL
45.60

67°32'5.23455"N
54°56'65.3454"W
NULL
6.00

下面的代码尝试首先拆分成空格分隔符,这个拆分甚至在双引号内也是如此,并作为单独的条目

char[] space = new Char[] { ' ' };

string[] data = comp.Split(space, StringSplitOptions.RemoveEmptyEntries);

标签: c#regex

解决方案


您可以匹配未用空格括起来的双引号之间的任何子字符串,并将其中的内容捕获到命名组中,或者匹配任何 1+ 个非空白字符并捕获到同名组中并使用

var results = Regex.Matches(str, @"(?<!\S)""(?<o>.*?)""(?!\S)|(?<o>\S+)")
                .Cast<Match>()
                .Select(m => m.Groups["o"].Value)
                .ToList();

请参阅正则表达式演示

图案细节

  • (?<!\S)- 在当前位置的左侧需要一个空格或字符串开头
  • "- 双引号
  • (?<o>.*?)- 组“o”:除换行符以外的任何 0+ 个字符,尽可能少
  • "- 双引号
  • (?!\S)- 在当前位置的右侧需要一个空格或字符串结尾
  • |- 或者
  • (?<o>\S+)- 组“o”:任何 1+ 个非空白字符。

.NET 允许在一个正则表达式模式中使用同名组,将找到的值累积到相应的内存缓冲区中,您可以通过.Select(m => m.Groups["o"].Value).


推荐阅读