你好,我正在学习正则表达式,我需要你的智慧来解决这个问题。
我需要知道我是否可以在某处搜索某个单词的匹配项,如果匹配,我将整篇文章与集合匹配,然后我在集合中的每个项目中搜索foreach
并用另一个关键字替换...此代码有效,但我需要知道如果可以不这样做,foreach
因为它浪费内存....
MatchCollection mc;
List<string> listek = new List<string>();
Regex r = new Regex(@".*" + word + @".*");
mc = r.Matches(text);
foreach (var item in mc)
{
listek.Add(Regex.Replace(item.ToString(), word, @"<span class=""highlighted"">" + word + "</span>"));
}
我有以下 XML:
<article>
<title>title 1</title>
<text>some long text</text>
</article>
<article>
<title>title 2</title>
<text>some long text</text>
</article>
我需要在每个文本节点中搜索关键字,如果我找到匹配项,我需要返回文章女巫替换关键字......我的代码显示了它但是虚拟方式..(@“。”+ word + @“。 ”)这意味着我添加到集合整个文本但只有包含我的关键字我想同时替换关键字并且我不知道如何
我是这样解决的:
internal static string SearchWordInXml()
{
var all = from a in WordBase.Descendants("ITEM")
select new
{
title = a.Element("TITLE").Value,
text = a.Element("TEXT").Value
};
foreach (var d in all)
{
Regex r = new Regex(@".*" + service.word + @".*");
Match v = r.Match(d.text);
Template();
var xElemData = TempBase.XPathSelectElement("//DATA");
if (v.Success)
{
XElement elemSet = new XElement("DATASET");
XElement elemId = new XElement("DATAPIECE");
XAttribute attId = new XAttribute("ATT", "TITLE");
XAttribute valueId = new XAttribute("VALUE", d.title);
elemSet.Add(elemId);
elemId.Add(attId);
elemId.Add(valueId);
XElement elemName = new XElement("DATAPIECE");
XAttribute attName = new XAttribute("ATT", "TEXT");
XAttribute valueName = new XAttribute("VALUE", Regex.Replace(d.text, service.word, @"<span class=""highlighted"">" + service.word + "</span>"));
xElemData.Add(elemSet);
elemSet.Add(elemName);
elemName.Add(attName);
elemName.Add(valueName);
}
}
return convert(TempBase);
}