日期:2014-05-17  浏览次数:20673 次

求正则切割字符串
象下面这样的字符串:

买家Ldkaka(2013-07-03 11:23:41)(未付款) :韵达快递 卡包一个。分销商ldby2000(2013-07-03 11:24:33)(未付款) :韵达快递卡包两个。分销商ldby2000(2013-07-03 11:25:57)(已付款,未发货) :韵达快递。

其中有买家留言,有分销商留言,每个留言都有时间和当前订单状态,分别是:
(2013-07-03 11:23:41)(未付款) :
(2013-07-03 11:24:33)(未付款) :
(2013-07-03 11:25:57)(已付款,未发货) :

现在想以类似上面这三个分割字符,规律是第一个括号中是时间,长度固定;第二个括号中是订单状态,长度不固定;最后面有一个全角冒号。

最终是想得到下面的分割结果:
韵达快递 卡包一个。
韵达快递卡包两个。
韵达快递。


------解决方案--------------------
string html = @"买家Ldkaka(2013-07-03 11:23:41)(未付款) :韵达快递 卡包一个。分销商ldby2000(2013-07-03 11:24:33)(未付款) :韵达快递卡包两个。分销商ldby2000(2013-07-03 11:25:57)(已付款,未发货) :韵达快递。

其中有买家留言,有分销商留言,每个留言都有时间和当前订单状态,分别是:
(2013-07-03 11:23:41)(未付款) :
(2013-07-03 11:24:33)(未付款) :
(2013-07-03 11:25:57)(已付款,未发货) :";
                var result = Regex.Matches(html, @"(?i)(?<=\(\d{4}-\d{2}-\d{2}\s+?\d{2}:\d{2}:\d{2}\)\s*?\([^)]*?\)\s*?[::])[^。]+?。").OfType<Match>().Select(a=>a.Value).ToList();
                /*
                 *  [0] "韵达快递 卡包一个。" string
[1] "韵达快递卡包两个。" string
[2] "韵达快递。" string

                 */

------解决方案--------------------
(?<=.*\(.*\)\(.*\)\s*:).*

------解决方案--------------------

 string source = @"买家Ldkaka(2013-07-03 11:23:41)(未付款) :韵达快递 卡包一个。分销商ldby2000(2013-07-03 11:24:33)(未付款) :韵达快递卡包两个。分销商ldby2000(2013-07-03 11:25:57)(已付款,未发货) :韵达快递。
 
其中有买家留言,有分销商留言,每个留言都有时间和当前订单状态,分别是:
(2013-07-03 11:23:41)(未付款) :
(2013-07-03 11:24:33)(未付款) :
(2013-07-03 11:25:57)(已付款,未发货) :";
            foreach (Match m in Regex.Matches(source, @"(?<=\(\d{4}-\d{1,2}-\d{1,2}\s*\d{1,2}:\d{1,2}:\d{1,2}\)\s*\([^()]*?\)\s*[::]).*?(?=。)"))