2011-02-28 81 views
1

我对C#和ASP.NET开发非常非常新。如何将文本转换为C#中的超链接?

我想要做的是找到并替换出现在网页正文中的某些词。每当某个单词出现在正文中时,我想将该单词转换为链接到我们网站上另一页的超链接。

我不知道该从哪里开始。我发现了在C#中执行查找和替换的代码,但是我没有找到任何帮助,只是通过阅读文档,查找某些字符串并将其更改为不同的字符串。

+0

所以,你要在运行时做到这一点? – 2011-02-28 14:15:39

+0

我有一个问题是身体文本来自哪里?如果它来自数据库,那么你可以通过简单的扩展方法来运行它。如果它是页面上的静态文本,则需要一个不同的计划。 – mark123 2011-02-28 14:37:07

+0

它是静态的。它被硬编码到页面中,网站后面没有数据库。 – EmilyM 2011-02-28 14:41:46

回答

1

在文档中查找单词或文本的最佳作业是使用正则表达式。如果你是新手,那么如果你打算让你的项目具有高性能,我肯定会推荐你通过它。

您可能还想在互联网上搜索Wiki API,它可以帮助您构建解决方案,而不必重新创造温水。

我很确定下面的链接可以让你开始学习正则表达式。下载表达测试仪并稍微玩一下。

http://www.radsoftware.com.au/articles/regexlearnsyntax.aspx

+0

谢谢,这是一个很大的帮助! – EmilyM 2011-02-28 14:48:12

+0

非常欢迎。我总是认为自己学习更好,而不是像空头猴那样复制/粘贴代码。 – 2011-02-28 14:53:20

+0

嗯,我不想复制粘贴,但我处于一个严重的时间紧迫和紧迫的截止日期,而且我是一名PHP开发人员,基本上在一周之内努力学习有关.NET的所有内容,所以还有更多的帮助可以帮助您给我会是惊人的。 – EmilyM 2011-02-28 14:54:43

3

一对夫妇的方式来做到这一点。

string text = "We the People of the United States, in Order to form a more perfect Union, establish Justice, insure domestic Tranquility, provide for the common defence, promote the general Welfare, and secure the Blessings of Liberty to ourselves and our Posterity, do ordain and establish this Constitution for the United States of America."; 

string augmentedText = text.Replace("provide", "<a href='#provide'>provide</a>"); 

您也可以使用正则表达式来完成此操作。

这里的每一个字转换为大写的例子:

public static string MatchEval(Match m) 
{ 
    return m.ToString().ToUpper(); 
} 

static void Main(string[] args) 
{ 
    string text = "This is some sample text."; 

    Console.WriteLine(text); 

    string result = Regex.Replace(text, @"\w+", new MatchEvaluator(MatchEval)); 

    Console.WriteLine(result); 
} 

希望这有助于......祝你好运!

+2

+1,用于引用整个序言:) – 2011-02-28 14:22:53

+0

没有必要运行正则表达式来简单地将单词或短语替换为另一个单词或短语。似乎是没有任何好处的大量开销。替换。这个问题还不够明确,尽管如此。 +1序言! :D – mark123 2011-02-28 14:34:21

+0

另外,如果有一个要替换的单词列表,使用Linq,特别是.Aggregate()方法是个好主意。 – mark123 2011-02-28 14:40:33

0

它看起来像你想要做的是使一个C#应用程序打开文件,并查看源代码。

您可能需要使用正则表达式来获取要替换的文本的最佳匹配,在编写此文件时还需要谨慎,以确保它只替换整个单词,例如,如果您想创建一个链接为汤姆这个词,带你到汤姆斯页面,你不希望这个创建明天的话链接等。

基本上我认为逻辑是发现前后有空格的单词,并将其替换为超链接。

当你第一次看它时,正则表达式可能有点令人生畏,但是一旦你拥有了你的表达式,这是一种非常强大的方式来执行这种事情。

+0

谢谢我绝对会看正则表达式!我甚至没有想过用错误替换其他词的部分! – EmilyM 2011-02-28 14:49:10

+0

我可能会提出的另一个建议是,如果您要使用它来更新文件,请首先将应用程序的副本转储到另一个目录中,以作为预防措施。 – Purplegoldfish 2011-02-28 14:56:40

0

如果你有一些特殊的话,我们一般使用像[NAME],[CLASS]识别文本,然后执行以下一些特殊的文字,

  1. 阅读HTML,ASPX文件,TextReader的类。
  2. 认为,一个字符串内整个文本,并开始串.replace(“[名称]”,@“...”)......将是必需的属性,
  3. 重新写的文字一些新的一页具有相同的扩展名。
+0

我不会推荐这个解决方案,因为它需要处理器时间来计算整个字符串,更不用说在一个变量内部保存10页长的文本非常耗费内存。此外,如果需要在文本内部替换新的单词,则整个文本将再次需要被搜索并写入另一个页面。 – 2011-02-28 14:33:14

+0

是的,它似乎有点耗费内存。我应该提到,每个页面上都会包含许多不同的关键字,因此每个关键字的重复过程都会一次又一次地发生 - 每个页面有几十次不同的单词。另外,我们的大部分网页都非常冗长,文字沉重。 – EmilyM 2011-02-28 14:38:03

+0

然后正则表达式是要走的路。另外,像上面提到的那样,查看Wiki的一些内容。 – 2011-02-28 14:54:59

0

好了艾米丽,帮助你在你的短期限一点:

阅读有关如何获取代码隐藏身体的HTML内容下面的文章: http://west-wind.com/weblog/posts/481.aspx

让我们假设你已经存储在名为_pageContent

变量渲染()输出我使用任何正则表达式现在,因为我没有正确地认为一个人的时候我。你可以自己玩一下。下面的链接可以指向你的方向:Regex to match multiple strings

public static void ChangeWordsToLinks() 
{ 
    Dictionary<string, string> _wordLinkCollection = new Dicationary<string, string>(); 
    // fill the collection which will replace words by links here 
    // Additionally you can fetch this from a database and loop 
    // through a DataTable to fill this collection 
    _wordLinkCollection.add("foo", "http://www.foobar.com"); 
    _wordLinkCollection.add("bar", "http://www.barfoo.com"); 

    // this is lazy code and SHOULD be optimized to a single RegExp string. 
    foreach(KayValuePair<string, string> pair in _wordLinkCollection) 
    { 
    _pageContent.Replace(String.Format(" {0} ", pair.Key), 
     String.Format("<a href='{0}'>{1}</a>", pair.Value, pair.Key)); 
    } 
} 

高兴,如果我能有所帮助,您

相关问题