根据特定字符拆分字符串

0 c# string substring list

我想使用逗号(,)拆分字符串并将其添加到列表中.但是,如果逗号跟随2个反斜杠,则不适用.

例如:

aaa,aaa,aaa >>拆分成3 >> (aaa) (aaa) (aaa)

aa\\,a,aaa >>将字符串拆分为2 >> (aa\\,a) (aaa)

我意识到我可以通过逐个遍历字符来使用子字符串来做到这一点,但我不认为这是有效的(特别是对于长字符串).

在C#中使用更快更有效的方法来实现这一目的吗?

谢谢!

ang*_*son 5

这个正则表达式将起作用:

string input = @"aaa\\,aaa,aaa";
var re = new Regex(@"(?<!\\),");
string[] parts = re.Split(input);
Run Code Online (Sandbox Code Playgroud)

基本上它表示要分割每个逗号,除了逗号前面有两个反斜杠,根据您的要求.

这是编写该代码的另一种方法,它为您提供了一些注释以供将来维护:

string input = @"aaa\\,aaa,aaa";
var re = new Regex(@"
    (?<!      # negative lookahead, ie. 'is not preceeded by'
        \\    # two backslashes
    )         # end of negative lookahead
    ,         # the comma to split on
    ", RegexOptions.IgnorePatternWhitespace);
string[] parts = re.Split(input);
Run Code Online (Sandbox Code Playgroud)

要将字符串添加到现有列表,请执行以下操作:

list.AddRange(re.Split(input));
Run Code Online (Sandbox Code Playgroud)

要构造新列表而不是数组,请执行以下操作:

List<string> = re.Split(input).ToList();
Run Code Online (Sandbox Code Playgroud)