需求是,有一任意长度的字符串,要将其按每四个1组的等长度分割成一数组
实现过程是这样的:
- void Main()
- {
- string str="afdsafasdfaaafddabadsdfdfd";
- var temp=Regex.Split(str,@"(?<=\G.{4})(?!$)");
- temp.ToList().ForEach(t=>Console.WriteLine(t));
- /*
- afds
- afas
- dfaa
- afdd
- abad
- sdfd
- fd
- */
- }
现在需求变了:
- 02004019,07000778,IV00258,CM2321,EX02557,VA901PI,JZ3051AZ,07000778,NW8307,EQ00978,YM2321,……
- //如上的一个字符串如何拆分成一行三个的形式
- //最后一行可能是一个,或者两个
- 02004019,07000778,IV00258
- CM2321,EX02557,VA901PI
- JZ3051AZ,07000778,NW8307
- EQ00978,YM2321
这样子的话,可以这样来实现:
- void Main()
- {
- string str="02004019,07000778,IV00258,CM2321,EX02557,VA901PI,JZ3051AZ,07000778,NW8307,EQ00978,YM2321,";
- var temp=Regex.Split(str,@"(?<=\G(?:\w+[,,]){3})");
- temp.ToList().ForEach(t=>Console.WriteLine(t));
- /*
- 02004019,07000778,IV00258,
- CM2321,EX02557,VA901PI,
- JZ3051AZ,07000778,NW8307,
- EQ00978,YM2321,
- */
- }
之所以用 (?<=\G(?:\w+[,,]){3}) 而 不用 (?<=\G(\w+[,,]){3})
是因为 如果在 Regex.Split 表达式中使用捕获组,则生成的字符串数组中会包含捕获组。
最后帖上 \G 的 MSDN解释:指定匹配必须出现在上一个匹配结束的地方。与 Match.NextMatch() 一起使用时,此断言确保所有匹配都是连续的。