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

2007-12-7 09:24 1749 13 13 分类: 汽车电子


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

下面有就讲下过程吧。



现有一串字符经过我处理得到

//女性频道下面的所有分类

        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有点同。



完整代码下载



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







986206.html

文晨曦 2007-12-07 09:24 发表评论
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
13
关闭 站长推荐上一条 /3 下一条