在c#中,有一行代码如:
string[] values = Regex.Split(fielddata, @"[;]+");
这分裂在什么价值观上?我对 @ 符号中的文字以及方括号和 + 在这里的含义感到有些困惑。有任何想法吗?
在c#中,有一行代码如:
string[] values = Regex.Split(fielddata, @"[;]+");
这分裂在什么价值观上?我对 @ 符号中的文字以及方括号和 + 在这里的含义感到有些困惑。有任何想法吗?
@ 是逐字字符串文字,这意味着您不必转义特殊字符。正如 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
[...]
是匹配方括号内的任何单个字符的字符类。在这种情况下,它是多余的,只是写作@";+"
意味着完全相同。
+
重复前一个字符或模式 1 次或多次。
所以这会连续分裂;
(尽可能多)。
逐字字符串 ( @"..."
) 仅用作一种良好做法。一旦您需要转义正则表达式中的内容,如果您使用普通字符串,它就会变得难看。同样,在这个特定示例中,省略@
. 但这是值得习惯的。
这些括号是不必要的。该正则表达式等效于以下内容:
string[] values = Regex.Split(fielddata, @";+");
它将拆分为任意数量的分号,因此"1;2;;3;;4;;;5;;6;7"
将返回一个数组:
['1', '2', '3', '4', '5', '6', '7']
split 方法将在 1 个或多个分号上拆分字段数据。@ 符号意味着您不必对字符进行转义,并且字符串是双引号之间的逐字记录。
如果fielddata = "a;b;c;;d;e;;;f"
那么
values = ["a","b","c","d","e","f"]