正则 实现等长度的分割字符串

需求是,有一任意长度的字符串,要将其按每四个1组的等长度分割成一数组

实现过程是这样的:

  1. void Main()  
  2. {  
  3.     string str="afdsafasdfaaafddabadsdfdfd";  
  4.     var temp=Regex.Split(str,@"(?<=\G.{4})(?!$)");  
  5.     temp.ToList().ForEach(t=>Console.WriteLine(t));  
  6.       
  7.     /* 
  8.     afds 
  9.     afas 
  10.     dfaa 
  11.     afdd 
  12.     abad 
  13.     sdfd 
  14.     fd  
  15.     */  
  16. }  

 

现在需求变了:

  1. 02004019,07000778,IV00258,CM2321,EX02557,VA901PI,JZ3051AZ,07000778,NW8307,EQ00978,YM2321,……  
  2. //如上的一个字符串如何拆分成一行三个的形式  
  3. //最后一行可能是一个,或者两个  
  4. 02004019,07000778,IV00258  
  5. CM2321,EX02557,VA901PI  
  6. JZ3051AZ,07000778,NW8307  
  7. EQ00978,YM2321  

 

这样子的话,可以这样来实现:

  1. void Main()  
  2. {  
  3.     string str="02004019,07000778,IV00258,CM2321,EX02557,VA901PI,JZ3051AZ,07000778,NW8307,EQ00978,YM2321,";  
  4.     var temp=Regex.Split(str,@"(?<=\G(?:\w+[,,]){3})");  
  5.     temp.ToList().ForEach(t=>Console.WriteLine(t));  
  6.       
  7.     /* 
  8.     02004019,07000778,IV00258, 
  9.     CM2321,EX02557,VA901PI, 
  10.     JZ3051AZ,07000778,NW8307, 
  11.     EQ00978,YM2321,  
  12.     */  
  13. }  

 

之所以用 (?<=\G(?:\w+[,,]){3})  而 不用 (?<=\G(\w+[,,]){3}) 

是因为 如果在 Regex.Split 表达式中使用捕获组,则生成的字符串数组中会包含捕获组。

 

最后帖上  \G 的 MSDN解释:指定匹配必须出现在上一个匹配结束的地方。与 Match.NextMatch() 一起使用时,此断言确保所有匹配都是连续的。

posted on 2012-10-17 22:14  szqizh  阅读(290)  评论(0编辑  收藏  举报

导航