【问题标题】:Regular expression pattern. Get fields from string正则表达式模式。从字符串中获取字段
【发布时间】:2014-09-23 19:38:18
【问题描述】:

我不会写正则表达式模式

字符串:

25,4.6,4%,32,"text1","text2, text3","text4,,t"

结果数组:

25 |
4.6 |
4% |
32 |
"text1" |
"text2, text3" |
"text4,,t" |

【问题讨论】:

标签: c# regex string


【解决方案1】:

我不会使用正则表达式(或 String.Split)来解析 CSV,而是使用可用的 csv 解析器。 TextFieldParser 是唯一已经内置于 .NET 的解析器。你也可以在 C# 中使用它:

string csv = "25,4.6,4%,32,\"text1\",\"text2, text3\",\"text4,,t\"";
var reader = new StringReader(csv);

List<string[]> allLineFields = new List<string[]>();
using (var parser = new Microsoft.VisualBasic.FileIO.TextFieldParser(reader))
{
    parser.Delimiters = new string[] { "," };
    parser.TrimWhiteSpace = true;
    parser.HasFieldsEnclosedInQuotes = true; // <--- !!!
    string[] fields;
    while ((fields = parser.ReadFields()) != null)
    {
        allLineFields.Add(fields);
    }
}
foreach (string[] arr in allLineFields)
    Console.WriteLine(string.Join("|", arr));

输出:25|4.6|4%|32|text1|text2, text3|text4,,t

当然还有其他可用的解析器,例如:A Fast CSV Reader

【讨论】:

    【解决方案2】:

    RegEx 不是解决此问题的方法,因为它的设计目的不是很好地处理带引号的字符串(或平衡括号)。

    但是,您的数据似乎是 CSV。如果这是真的,.NET 有一个 TextFieldParser 来解析 CSV(包括引号)。

    您必须在项目中添加对 Microsoft.VisualBasic 的引用才能使用它。

    查看 this SO question 以获取使用 C# 和引用值的示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-19
      • 2017-06-07
      • 2014-04-09
      • 2021-12-03
      • 1970-01-01
      • 2015-11-28
      • 2014-08-25
      • 1970-01-01
      相关资源
      最近更新 更多