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

    完整代码下载

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



  • 相关阅读:
    动态改变Spring定时任务执行频率
    tomcat
    liunx命令
    idea 使用笔记
    redis 笔记
    学习笔记 Optional
    JPA Example 基本使用使用实例
    面试经验总结
    基于LAMP实现后台活动发布和前端扫码签到系统
    XV6源代码阅读-文件系统
  • 原文地址:https://www.cnblogs.com/ericwen/p/RegexMatchGroups.html
Copyright © 2011-2022 走看看