基于特定字符分割字符串

本文关键字:字符串 分割 字符 于特定 | 更新日期: 2023-09-27 18:17:10

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

,

aaa,aaa,aaa>>将字符串拆分为3>> (aaa) (aaa) (aaa)

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

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

在c#中是否有更快更有效的方法来完成这个任务?

谢谢!

基于特定字符分割字符串

这个正则表达式可以工作:

string input = @"aaa'',aaa,aaa";
var re = new Regex(@"(?<!''),");
string[] parts = re.Split(input);

基本上它说每个逗号分开,除了逗号前面有两个反斜杠,根据您的要求。

这里有一种不同的方式来编写代码,为您将来的维护提供一些注释:

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);

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

list.AddRange(re.Split(input));

要构造一个新的列表,而不是一个数组,可以这样做:

List<string> = re.Split(input).ToList();

一个好的方法是使用一个带反向反向的正则表达式。

var test1 = @"aaa,aaa,aaa";
var test2 = @"aa'',a,aaa";
var pattern = @"(?<!''),";
Regex.Split(test0, pattern); // returns ["aaa", "aaa", "aaa"]
Regex.Split(test1, pattern); // returns [@"aa'',a", "aaa"]

(?<!'')是一个负向后看,这意味着下一个字符只有在前两个字符不是''时才匹配。