识别模式以从C#HTML编码字符串中提取单词

时间:2012-09-12 06:13:35

标签: c# html-encode pattern-recognition

我正在寻找一些帮助来识别来自HTML编码的字符串的模式。

如果我有一个HTML编码字符串,如:

string strHTMLText=@"<p>Pellentesque habitant [[@Code1]] morbi tristique senectus [[@Code2]] et netus et malesuada fames ac [[@Code3]] turpis egestas.</p>"

我需要提取单词 [[@ Code1]],[@ Code2],[[@ Code3]] ,这是动态的,他们的计数是未知的。这些单词已用于替换提供的HTML文本中的其他值。

我想识别模式 [[@ 某些]] 并填充数组等中的所有匹配项,以便我可以处理这些值以获取相关的稍后来自数据库的值。

3 个答案:

答案 0 :(得分:4)

string strHTMLText=@"<p>Pellentesque habitant [[@Code1]] morbi tristique senectus [[@Code2]] et netus et malesuada fames ac [[@Code3]] turpis egestas.</p>";
var input = HttpUtility.HtmlDecode(strHTMLText);
var list = Regex.Matches(input, @"\[\[@(.+?)\]\]")
    .Cast<Match>()
    .Select(m => m.Groups[1].Value)
    .ToList();

答案 1 :(得分:0)

在有人使用正则表达式解决方案之前,为了好玩,我为你做了这个:

string strHTMLText=@"&lt;p&gt;Pellentesque habitant [[@Code1]] morbi tristique senectus [[@Code2]] et netus et malesuada fames ac [[@Code3]] turpis egestas.&lt;/p&gt;";

IEnumerable<string> arr = strHTMLText.Split(new char[] {'['};
List<string> output = new List<string>();
foreach(var item in arr)
{
string placeHolder = item.Substring(0,item.IndexOf("]");
output.Add(placeHolder);
}

将输出变为数组:

output.ToArray();

答案 2 :(得分:0)

您可以使用正则表达式。

尝试使用此表达式

Regex exp = new Regex("\[.+?\]")
MatchCollection mc = exp.matches(<Your string here>);
foreach(Match m in mc)
{
   String code = m.value;
}

我还没有测试过这段代码,它是一个快速而又脏的伪代码,所以请耐心等待。