【发布时间】:2020-05-03 15:42:14
【问题描述】:
前言:这个问题是this question的派生题。
using System;
using System.Linq;
using System.Text.RegularExpressions;
class MainClass {
public static void Main (string[] args) {
const string rawLine = "\"TeamName\",\"PlayerName\",\"Position\" \"Chargers\",\"Philip Rivers\",\"QB\" \"Colts\",\"Peyton Manning\",\"QB\" \"Patriots\",\"Tom Brady\",\"QB\"";
var parsedLines = Regex.Split(rawLine, "(\".*? \"(?:,\".*? \")*)");
parsedLines.ToList().ForEach(Console.WriteLine);
Console.WriteLine("Press [ENTER] to exit.");
Console.ReadLine();
}
}
这是我的输出:
"TeamName","PlayerName","Position" "
Chargers
","Philip Rivers","QB" "
Colts
","Peyton Manning","QB" "
Patriots","Tom Brady","QB"
Press [ENTER] to exit.
这是我想要的输出:
"TeamName","PlayerName","Position"
"Chargers","Philip Rivers","QB"
"Colts","Peyton Manning","QB"
"Patriots","Tom Brady","QB"
Press [ENTER] to exit.
如何修复正则表达式以生成我想要的输出?
相关:
【问题讨论】:
-
我强烈建议您使用 CSVHelper 而不是正则表达式,除非您确定 CSV 不会包含嵌入/转义引号或逗号之类的内容。 CSV 是一种非常灵活的格式。它甚至不必用逗号分隔即可成为 CSV。
-
@Amy 我不熟悉 CSVHelper,但我很熟悉。能否请您描述一个使用 CSVHelper 的解决方案?
-
我已经很久没有需要它的服务了(过去几年没有 CSV :o),但我记得他们的文档相当不错。见joshclose.github.io/CsvHelper/getting-started。
-
或者甚至可以用
"\"\n\""或任何你想要的换行符替换"\" \""。 -
除非 CSVHelper 有办法指定 record 分隔符,否则它不会有任何帮助。上一个问题的答案(已删除)提到了 CSVHelper 配置的
Delimiter属性,但那是 field 分隔符(这就是它被删除的原因)。我找不到记录分隔符选项(但这并不意味着没有)。那里的另一个答案提到了在两个空格和quote-space-space-quote上的拆分,所以人们希望在转向正则表达式然后发布这个问题之前已经探索过。