0

在c#中,有一行代码如:

string[] values = Regex.Split(fielddata, @"[;]+");

这分裂在什么价值观上?我对 @ 符号中的文字以及方括号和 + 在这里的含义感到有些困惑。有任何想法吗?

4

4 回答 4

2

@ 是逐字字符串文字,这意味着您不必转义特殊字符。正如 Asad 已经说过的,它拆分为一个或多个连续的分号,其中 + 代表 1 或更多(正则表达式语法)

这是一个可运行的示例:http: //ideone.com/whLqUe

        string input = "a;b; ;c;;;d";
        string[] values = Regex.Split(input, @";+");
        foreach (var value in values)
            Console.WriteLine(value);

输出

a
b

c
d
于 2012-11-16T20:00:21.390 回答
2

这是一个很好的教程。

[...]是匹配方括号内的任何单个字符的字符类。在这种情况下,它是多余的,只是写作@";+"意味着完全相同。

+重复前一个字符或模式 1 次或多次。

所以这会连续分裂;(尽可能多)。

逐字字符串 ( @"...") 仅用作一种良好做法。一旦您需要转义正则表达式中的内容,如果您使用普通字符串,它就会变得难看。同样,在这个特定示例中,省略@. 但这是值得习惯的。

于 2012-11-16T20:00:41.940 回答
1

这些括号是不必要的。该正则表达式等效于以下内容:

string[] values = Regex.Split(fielddata, @";+");

它将拆分为任意数量的分号,因此"1;2;;3;;4;;;5;;6;7"将返回一个数组:

['1', '2', '3', '4', '5', '6', '7']
于 2012-11-16T19:59:37.407 回答
1

split 方法将在 1 个或多个分号上拆分字段数据。@ 符号意味着您不必对字符进行转义,并且字符串是双引号之间的逐字记录。

如果fielddata = "a;b;c;;d;e;;;f" 那么

values = ["a","b","c","d","e","f"]
于 2012-11-16T20:02:43.350 回答