用c#编写一个regex命令来分割一个数组

本文关键字:一个 分割 数组 命令 regex | 更新日期: 2023-09-27 17:52:34

Regex是我一直希望能够自己编写的东西之一,尽管我对它的工作原理有基本的了解,但我从来没有发现自己在需要使用它的情况下,它已经在网络上广泛存在(例如验证电子邮件地址)。

我遇到的一个问题是,我正在接收一个逗号分隔的字符串,但是一些字符串值也包含逗号。例如,我可能收到:

$命令= 1、2、3,"字符串","另一个字符串",4、5、6

通常我不会收到这样的东西,但是设备发送给我这个字符串数组允许它发生,所以如果它发生了,我希望能够相应地拆分数组。

很明显,就像这样分割它(其中rawResponse删除了$COMMAND=部分:

string[] response = rawResponse.Split(',');

不够好!我认为正则表达式是正确的工具的工作,谁能帮我写吗?

用c#编写一个regex命令来分割一个数组

string rawResponse = @"1,2,3,""string"",""another,string"",4,5";
string pattern = @"[^,""]+|""([^""]*)""";
foreach(Match match in  Regex.Matches(rawResponse, pattern))
       // use match.Value

结果:

1
2
3
"string"
"another,string"
4
5

如果你需要一个字符串数组,你可以使用Linq:

var response = Regex.Matches(rawResponse, pattern).Cast<Match>()
                    .Select(m => m.Value).ToArray();
string originalString = @"1,2,3,""string"",""another,string"",4,5,6";
string regexPattern = @"(("".*?"")|(.*?))(,|$)";
foreach(Match match in  Regex.Matches(originalString, regexPattern))
{
}