正则表达式的妙用--获得数组
2007-12-07 09:24
155 查看
近来在工作上遇到了比较有意思的字符串,如果不用正则表达式去分析会觉得很吃力,如果用了正则表达的分析方法会觉得代码既简洁而有质量。
下面有就讲下过程吧。
现有一串字符经过我处理得到
//女性频道下面的所有分类
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有点同。
完整代码下载
测试正则非常好的工具下载
下面有就讲下过程吧。
现有一串字符经过我处理得到
//女性频道下面的所有分类
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有点同。
完整代码下载
测试正则非常好的工具下载
相关文章推荐
- 正则表达式的妙用--获得数组
- C++中函数指针数组的妙用(转载)
- Android--获得0-n随机排列的数组
- php extract 函数的妙用 数组键名为声明为变量,键值赋值为变量内容
- c++如何获得数组的大小
- POJ 2481 Cows && POJ 2352 Stars(树状数组妙用)
- iOS 随机打乱一个数组的顺序 获得一个新的数组
- 妙用0元素数组 实现大小可变结构体
- php中获得数组长度的方法
- 函数指针数组的妙用
- 获得一个2n数组中的N个元素,使得该N个元素与剩余元素和最小
- 获得VB数组的维数
- php判断是否为一维数组--count的妙用
- 已知获得的RGB像素值为1维数组,将像素分别存入R、G、B 3个通道
- 函数指针数组的妙用
- java获得数组、字符串、集合长度的方法
- 通过交换获得两个数组的最小差(转)
- 结构体零长数组的妙用及warning C4200:使用了非标准扩展:结构/联合中的零大小数组解决
- PHP获得数组的交集与差集
- JS函数arguments数组获得实际传参数个数