[英]Split csv file with single quotes, double quotes or no quotes in c# using regular expression
[英]Regular Expression to split a string with comma and double quotes in c#
我試過一個正則表達式來分割一個逗號和空格的字符串。 表達式匹配除了一個以外的所有情況。 我試過的代碼是:
List<string> strNewSplit = new List<string>();
Regex csvSplit = new Regex("(?:^|,)(\"(?:[^\"]+|\"\")*\"|[^,]*)", RegexOptions.Compiled);
foreach (Match match in csvSplit.Matches(input))
{
strNewSplit.Add(match.Value.TrimStart(','));
}
return strNewSplit;
CASE1:“MYSQL,ORACLE”,“C#,ASP.NET”
EXpectedOutput:
“MySQL和甲骨文”
“C#,ASP.NET”
結果:通過
CASE2:“MYSQL,ORACLE”,“C#,ASP.NET”
ExpectedOutput:
“MySQL和甲骨文”
“C#,ASP.NET”
實際輸出:
“MySQL和甲骨文”
“C#
ASP.NET”
結果:失敗。
如果我在兩個DoubleQuotes之間的逗號之后提供空格,那么我沒有得到適當的輸出。 我錯過了什么嗎? 請提供更好的解決方案。
我通常寫下我的輸入的EBNF來解析。
在你的情況下,我會說:
List = ListItem {Space *,Space * ListItem} *;
ListItem =“”“標識符”“”; //標識符就是一切
空格= [\\ t] +;
這意味着List由一個ListItem組成,該ListItem被零或多個(*)ListItems所包含,這些ListItems用逗號和空格分隔空格。
這引導我到以下(你正在搜索ListItems):
static void Main(string[] args)
{
matchRegex("\"MYSQL,ORACLE\",\"C#,ASP.NET\"").ForEach(Console.WriteLine);
matchRegex("\"MYSQL,ORACLE\", \"C#,ASP.NET\"").ForEach(Console.WriteLine);
}
static List<string> matchRegex(string input)
{
List<string> strNewSplit = new List<string>();
Regex csvSplit = new Regex(
"(\"(?:[^\"]*)\")"
, RegexOptions.Compiled);
foreach (Match match in csvSplit.Matches(input))
{
strNewSplit.Add(match.Value.TrimStart(','))
}
return strNewSplit;
}
哪個返回你想要的。 希望我理解正確。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.