正则表达式的妙用--获得数组


    近来在工作上遇到了比较有意思的字符串,如果不用正则表达式去分析会觉得很吃力,如果用了正则表达的分析方法会觉得代码既简洁而有质量。
下面有就讲下过程吧。

现有一串字符经过我处理得到
// 女性频道下面的所有分类
         public   static   readonly   string  AllSubSort  =   " {美容,UN1070801},{瘦身,UN1070802},{首饰,UN1070803},{服饰,UN1070804},{配饰,UN1070805}, "
            
+   " {瑜伽,UN1090102},{居家,UN10709},{装饰,UN1070901},{园艺,UN1070902},{爱情,UN1070106},{夫妻,UN1070101},{婆媳,UN1070102} "
            
+   " ,{育儿,UN10703},{营养,UN1100205},{美食,UN107070204},{药膳,UN110080101},{保健,UN1100304},{心理,UN1100107},{妇科,UN1100507} " ;

一看你会发现,这个字符串包括键值的对应关系,如何通过键得到值呢,在这里“{}”里面的两者都可以当作键。
如果不用正则你会怎么做呢。
......
现在我用正则来做就非常的简质。
请看代码
  ///   <summary>
        
///  通过分类名称找到分类代码
        
///   </summary>
        
///   <param name="subSortName"> 分类名称 </param>
        
///   <returns> 分类代码 </returns>
         public   static   string  FindSubSortCodeByName( string  subSortName)
        {
            
string  strRet  =   "" ;
            
if  (subSortName  ==   null )
                
return  strRet;
            subSortName 
=  subSortName.Trim();
            
string  pattern  =   " { "   +  subSortName  +   " ,(?<key>[^}]*)} " ;
            Match match 
=  Regex.Match(AllSubSort, pattern);
            
if  (match  !=   null )
                strRet 
=  match.Groups[ " key " ].Value;
            
return  strRet;
        }

代码中pattern很有意思,
当subSortName=" 美容"时,pattern=" {美容,(?<key>[^}]*)}"。
标红的地方为关键,以"()"表示一个Group,"?<key>"中的代码key表示Group的键(当然这这个key是个标志符号),后面表示Group的value,
即可通过 strRet = match.Groups[ " key " ].Value;来获取。

如何获取全部的value呢
  ///   <summary>
        
///  获取所有分类代码以+连接
        
///   </summary>
        
///   <returns> 所有分类代码 </returns>
         public   static   string  GetAllSubSortCode()
        {
            
string  strRet  =   "" ;
            
string  pattern  =   " {[^,]*,(?<key>[^}]*)} " ;
            MatchCollection matchs 
=  Regex.Matches(AllSubSort, pattern);
            
if  (matchs  !=   null )
            {
                
foreach  (Match match  in  matchs)
                {
                    
if  (match  !=   null )
                        strRet 
+=   " + "   +  match.Groups[ " key " ].Value;
                }
            }
            
return  strRet.Trim( ' + ' ) ;
        }
道理是相同的,只是pattern有点同。

完整代码下载

测试正则非常好的工具下载



转载于:https://www.cnblogs.com/ericwen/archive/2007/12/07/RegexMatchGroups.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值