替换自定义html标记的C#正则表达式

替换自定义html标记的C#正则表达式,c#,regex,string,C#,Regex,String,我的应用程序收集内部用户提供的HTML内容,这些内容用于在公司网站上动态生成文章 我想实现一个功能,用户可以用一个名为….的特殊标记将HTML内容中的单词/短语包围起来。。。。当内容保存在数据库中时,应用程序将在对单词或短语进行编码后,将单词/短语转换为www.google.com/?q=WORD/PHRASE 我认为正则表达式可以用来实现这个功能,但是需要一些关于如何实现它的指导,因为可能有不止一个。。。。HTML内容中的标记 欢迎使用示例。< P>您应该考虑使用HTML DOM来解析内容而不

我的应用程序收集内部用户提供的HTML内容,这些内容用于在公司网站上动态生成文章

我想实现一个功能,用户可以用一个名为….的特殊标记将HTML内容中的单词/短语包围起来。。。。当内容保存在数据库中时,应用程序将在对单词或短语进行编码后,将单词/短语转换为www.google.com/?q=WORD/PHRASE

我认为正则表达式可以用来实现这个功能,但是需要一些关于如何实现它的指导,因为可能有不止一个。。。。HTML内容中的标记


欢迎使用示例。

< P>您应该考虑使用HTML DOM来解析内容而不是正则表达式。用于解析html的正则表达式因其复杂性和意外错误而臭名昭著。

如果不能嵌套搜索标记,那么贪婪匹配应该非常容易

替换

(.*)将是关键。

您可以试试

Regex.Replace(strMyHtmlInputString, "\<search\>(.+?)\<\/search\>", "www.google.com/?q=\1")
Regex.Replace(strMyHtmlInputString,“\(.+?)\”,“www.google.com/?q=\1”)

第一组中的问号表示“尽可能少地分组以匹配此组”。

类似的方法应该可以:

string data = @"some text <search>search term 1</search> some more text <search>another search term</search>";
Console.WriteLine(Regex.Replace(data, @"(?:<search>)(.*?)(?:</search>)", @"<a href=""http://www.google.com/?q=$1"">$1</a>"));
string data=@“一些文本搜索项1一些更多文本另一个搜索项”;
Console.WriteLine(Regex.Replace(数据,@“(?:)(.*?(:)”,@”);

正则表达式不善于处理XML/HTML数据。最好使用真正的HTML或XML读取API。例如,在处理包含嵌套标记的HTML时,正则表达式会遇到问题

如果您得到的是tag-soup HTML,您很可能就是这样,那么您将无法在没有很大压力的情况下使用.NET的本机类。您应该研究,它有一个与XmlDocument完全相同的API,但它包含一些特定于HTML的内容,例如将HTML清理为格式良好的

本例使用XmlDocument类,但使用HtmlAlityPack的HtmlDocument应该非常类似(只使用HtmlDocument而不是XmlDocument)。这应该将
标记替换为指向Google的链接

XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
XmlNode searchTag = doc.SelectSingleNode("//search");
XmlElement linkTag = doc.CreateElement("a");
linkTag.InnerXml = searchTag.InnerXml;
linkTag.Attributes["href"].Value = "http://google.com/?q=" + linkTag.InnerText;
searchTag.ParentNode.ReplaceChild(searchTag, linkTag);

免责声明:我没有测试上面的示例代码,但它应该可以工作。

你能举一个例子,说明如何使用html dom作为我想要使用的自定义标记吗?请参阅DanHerbert更完整的回答这很好,你能反过来吗?转换