近來在工作上遇到了比較有意思的字符串,如果不用正則表達式去分析會覺得很吃力,如果用了正則表達的分析方法會覺得代碼既簡潔而有質量。
下面有就講下過程吧。
現有一串字符經過我處理得到
//女性頻道下面的所有分類
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有點同。
標簽:
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:博客