gpt4 book ai didi

c# - 在 C# 中用逗号和双引号分割字符串的正则表达式

转载 作者:行者123 更新时间:2023-11-30 17:59:59 24 4
gpt4 key购买 nike

我尝试了一个正则表达式来用逗号和空格分割一个字符串。表达式匹配除一个以外的所有情况。我试过的代码是:

        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"

预期输出:

"MySQL,ORACLE"

"C#,ASP.NET"

结果:通过

CASE2: "MYSQL,ORACLE", "C#,ASP.NET"

预期输出:

"MySQL,ORACLE"

"C#,ASP.NET"

实际输出:

"MySQL,ORACLE"

"C#

ASP.NET"

结果:失败。

如果我在两个 DoubleQuotes 之间的逗号后提供一个空格,那么我没有得到适当的输出。我错过了什么吗?请提供更好的解决方案。

最佳答案

我通常会记下要解析的输入的 EBNF。

在你的情况下我会说:

List = ListItem {空格* , 空格* ListItem}*;

ListItem = """标识符 """;//标识符就是所有的东西 "

空格 = [\t ]+;

这意味着一个 List 由一个 ListItem 组成,该 ListItem 由零个或多个 (*) ListItem 组成,这些 ListItem 用空格、逗号和空格分隔。

这让我想到了以下内容(您正在搜索 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;
}

返回你想要的。希望我理解正确。

关于c# - 在 C# 中用逗号和双引号分割字符串的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10630049/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com