Regex.GroupNameFromNumber
上次用到他是2007年底的事了,今天想要用可是卻想不起來(不知道是不是年紀愈
來愈大了~Orz),所以把它紀錄一次…
利用Regex.GroupNameFromNumber可以用群組編號取得群組名稱,這樣可以讓Regular使用
上更彈性一點,我上次和這次都是把群組名稱拿來置換字串。
註:0表全部mapping到的,從1開始是各小群組
範例:
/// 處理特殊tag [b][u][i][sub][sup]
/// </summary>
/// <param name="txtContent"></param>
/// <returns></returns>
private string formatContent(string txtContent)
{
txtContent = txtContent.Replace("&", "&").Replace("<", "<").Replace(">", ">").Replace("'","'").Replace("\"", """);
string[] patterns = {
@"(?im).*?(?<r>\[b\](?<b>.*?)\[/b\]).*?",
@"(?im).*?(?<r>\[u\](?<u>.*?)\[/u\]).*?",
@"(?im).*?(?<r>\[i\](?<i>.*?)\[/i\]).*?",
@"(?im).*?(?<r>\[sub\](?<sub>.*?)\[/sub\]).*?",
@"(?im).*?(?<r>\[sup\](?<sup>.*?)\[/sup\]).*?"
};
for(int i= 0; i < patterns.Length; i++)
{
Regex reg = new Regex(patterns[i]);
string tag = reg.GroupNameFromNumber(2);
Match m = reg.Match(txtContent);
while(m.Success)
{
string r = m.Groups["r"].Value;
string c = m.Groups[tag].Value;
txtContent = txtContent.Replace(r, String.Format("<{0}>{1}</{0}>",tag, c));
m = m.NextMatch();
}
}
return txtContent;
}