簡體   English   中英

正則表達式用c#中的逗號和雙引號拆分字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM