こんにちは、私は正規表現を学んでいます。この問題を解決するには、あなたの知性の合計が必要です。
どこかで単語の一致を検索できるかどうかを知る必要があり、一致した場合は記事全体をコレクションに一致させ、コレクション内のすべてのアイテムを検索し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);
}