【问题标题】:Comma Delimiter Issue [duplicate]逗号分隔符问题[重复]
【发布时间】:2017-09-28 16:45:55
【问题描述】:

我正在开发一个基于 C# 的应用程序,并希望使用“,”(逗号)分隔符来拆分字符串。当逗号是我的字符串的一部分而不是分隔符时问题就来了(例如我们在地址中)。 示例:

输入:“A,B,Venus, New York 10001”

实际输出:“A”、“B”、“维纳斯”、“纽约”

必需的输出:“A”、“B”、“维纳斯,纽约”

此类问题的最佳做法是什么? 谢谢。

【问题讨论】:

  • 不要重新发明轮子。使用现有的 CSV 解析器。您应该将输入更改为 A,B,"Venus, New York 10001"
  • 或者更好的是,首先不要使用逗号分隔的文本。如果您可以控制输入,请使用 JSON 甚至 XML。
  • 会做的,谢谢。
  • 带逗号的字段是最后一行吗?
  • 不确定重复问题中的答案是否真的可以解决这里的海报要求。如果您对生成它们的工具没有任何控制权,那么不规则的 CSV 就会非常有问题

标签: c# .net delimiter


【解决方案1】:

我建议你看看dotctorZohar Peled cmets。这可能会导致更强大的解决方案。但是,如果您仍然需要按照问题中所述拆分字符串,则可以执行以下操作。

我注意到输入是split,在一个逗号上,not 后跟一个whitespace。当逗号后面有whitespace 时,字符串不应为split。如果您的情况始终如此,那么以下方法将起作用:

static void Main(string[] args)
{
    var result = SplitOnCommaNotFollowedByWhiteSpace("A,B,Venus, New York 10001");
    //Result: string["A", "B", "Venus, New York"]
}

public static string[] SplitOnCommaNotFollowedByWhiteSpace(string input)
{
    var regex = new Regex(@",(?!\s)", RegexOptions.IgnoreCase);
    return regex.Split(input);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2017-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多