近來(lái)在工作上遇到了比較有意思的字符串,如果不用正則表達(dá)式去分析會(huì)覺(jué)得很吃力,如果用了正則表達(dá)的分析方法會(huì)覺(jué)得代碼既簡(jiǎn)潔而有質(zhì)量。
下面有就講下過(guò)程吧。
現(xiàn)有一串字符經(jīng)過(guò)我處理得到
//女性頻道下面的所有分類
public static readonly string AllSubSort = "{美容,UN1070801},{瘦身,UN1070802},{首飾,UN1070803},{服飾,UN1070804},{配飾,UN1070805},"
+ "{瑜伽,UN1090102},{居家,UN10709},{裝飾,UN1070901},{園藝,UN1070902},{愛(ài)情,UN1070106},{夫妻,UN1070101},{婆媳,UN1070102}"
+ ",{育兒,UN10703},{營(yíng)養(yǎng),UN1100205},{美食,UN107070204},{藥膳,UN110080101},{保健,UN1100304},{心理,UN1100107},{婦科,UN1100507}";
一看你會(huì)發(fā)現(xiàn),這個(gè)字符串包括鍵值的對(duì)應(yīng)關(guān)系,如何通過(guò)鍵得到值呢,在這里“{}”里面的兩者都可以當(dāng)作鍵。
如果不用正則你會(huì)怎么做呢。
......
現(xiàn)在我用正則來(lái)做就非常的簡(jiǎn)質(zhì)。
請(qǐng)看代碼
/// <summary>
/// 通過(guò)分類名稱找到分類代碼
/// </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很有意思,當(dāng)subSortName="美容"時(shí),pattern="{美容,(?<key>[^}]*)}"。標(biāo)紅的地方為關(guān)鍵,以"()"表示一個(gè)Group,"?<key>"中的代碼key表示Group的鍵(當(dāng)然這這個(gè)key是個(gè)標(biāo)志符號(hào)),后面表示Group的value,即可通過(guò)strRet=match.Groups["key"].Value;來(lái)獲取。
如何獲取全部的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有點(diǎn)同。
標(biāo)簽:
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:博客