zoukankan      html  css  js  c++  java
  • 正则表达式的妙用获得数组


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

    现有一串字符经过我处理得到
    //女性频道下面的所有分类
            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有点同。

    完整代码下载

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



  • 相关阅读:
    bzoj3505 数三角形 组合计数
    cogs2057 殉国 扩展欧几里得
    cogs333 荒岛野人 扩展欧几里得
    bzoj1123 BLO tarjan求点双连通分量
    poj3352 road construction tarjan求双连通分量
    cogs1804 联合权值 dp
    cogs2478 简单的最近公共祖先 树形dp
    cogs1493 递推关系 矩阵
    cogs2557 天天爱跑步 LCA
    hdu4738 Caocao's Bridge Tarjan求割边
  • 原文地址:https://www.cnblogs.com/ericwen/p/RegexMatchGroups.html
Copyright © 2011-2022 走看看