c# - 拆分具有多个拆分字符串的文本文件
问题描述
我正在尝试读取具有空格分隔符和双引号的文本文件,并且没有一种简单的方法来识别这种情况,我只是想检查是否可以使用预定义的正则表达式来实现,否则我需要开始进行自定义拆分
这是字符串
“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);
解决方案
您可以匹配未用空格括起来的双引号之间的任何子字符串,并将其中的内容捕获到命名组中,或者匹配任何 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)
.
推荐阅读
- javascript - 如何比较 JavaScript 中的两个对象?
- playframework - Play Framework手动填充某些字段
- angular5 - Angular 5 多个领域的本地开发
- angular - 不允许多个构造函数实现
- javascript - `fs.stat` 函数用于指向 Windows 中目录的符号链接
- python - 如何从 SQL 数据库中导入数据?
- javascript - Javascript ajax调用未打开从url返回的文件,当从url调用时有效
- maven - JAR 包含在项目中,当我创建 WAR 文件时,缺少 JAR 包(SPRING BOOT)
- perl - Perl 脚本没有输出
- cuda - 从设备全局内存到主机全局内存是否有等效于“cudaMemcpy”的东西,我可以在设备函数中调用?