我有一个关于拆分字符串的问题。我想拆分字符串,但在字符串中看到字符“”然后不拆分并删除空格。
我的字符串:
String tmp = "abc 123 \"Edk k3\" String;";
结果:
1: abc
2: 123
3: Edkk3 // don't split after "" and remove empty spaces
4: String
我的结果代码,但我不知道如何删除“”
中的空格var tmpList = tmp.Split(new[] { '"' }).SelectMany((s, i) =>
{
if (i % 2 == 1) return new[] { s };
return s.Split(new[] { ' ', ';' }, StringSplitOptions.RemoveEmptyEntries);
}).ToList();
或者这不会看到“”,所以它会分裂所有内容
string[] tmpList = tmp.Split(new Char[] { ' ', ';', '\"', ',' }, StringSplitOptions.RemoveEmptyEntries);
答案 0 :(得分:8)
添加.Replace(“”,“”)
String tmp = @"abc 123 ""Edk k3"" String;";
var tmpList = tmp.Split(new[] { '"' }).SelectMany((s, i) =>
{
if (i % 2 == 1) return new[] { s.Replace(" ", "") };
return s.Split(new[] { ' ', ';' }, StringSplitOptions.RemoveEmptyEntries);
}).ToList();
答案 1 :(得分:0)
string.Split
不适合您想要做的事情,因为您无法告诉它忽略"
中的内容。
我也不会使用Regex
,因为这会变得复杂且占用大量内存(对于长字符串)。
实现您自己的解析器 - 使用状态机来跟踪您是否在引用的部分内。
答案 2 :(得分:0)
您可以使用正则表达式。而不是分裂,指定你想要保留的内容。
示例:
string tmp = "abc 123 \"Edk k3\" String;";
MatchCollection m = Regex.Matches(tmp, @"""(.*?)""|([^ ]+)");
foreach (Match s in m) {
Console.WriteLine(s.Groups[1].Value.Replace(" ", "") + s.Groups[2].Value);
}
输出:
abc
123
Edkk3
String;