在网页内容中自动格式化

时间:2010-06-07 19:49:53

标签: c# regex asp.net-mvc

我将内容存储为原始文本存储在我在网站上的HTML表格中显示的数据库中。在内容中人们引用数字,我希望这些数字自动成为链接

例如,在我可能有的字段中

This description is for driving a car.  The manual refers to ABC:25920 and is very durable.

在上面的这种情况下,我希望ABC:2590实际上是一个转换为此HTML的HTML链接

<a href='www.mysite.com/parts/25920'>ABC:25920</a>

这样做的最佳方法是什么。某种寻找和替换?这里有其他模式匹配/正则表达式解决方案吗?

2 个答案:

答案 0 :(得分:2)

目前尚不清楚这些数字的格式。如果规则是由大写字母,冒号和数字 n 组成的任何内容都应该转换为链接www.mysite.com/parts/n,那么您可以使用基于正则表达式的查找 - 和 - 替换解决方案您可能希望查找正则表达式[A-Z]+:(\d+)。这说的是“找到一个或多个大写字母,冒号和(捕获它们)找到一个或多个数字”。然后,您想要将其替换为<a href='www.mysiste.com/parts/$1'>$0</a>;在这种情况下,$1引用捕获组(即数字),$0引用整个匹配。我不知道C#,但我认为这看起来像

using System.Text.RegularExpressions;
// ...
string result = Regex.replace( getTextFromDatabase()
                             , @"[A-Z]+:(\d+)"
                             , "<a href='www.mysiste.com/parts/$1'>$0</a>");

答案 1 :(得分:0)

假设:
部件号始终为5位数 部件标识符是三个字母字符。

static string RegexLinkify(string text)
{ 
    string pattern = @"(?<alphaCode>[A-Z][A-Z][A-Z]):(?<partNumber>\d{5})";
    Regex r = new Regex(pattern, RegexOptions.Singleline);
    Match matches = r.Match(text);
    string alphaCode = matches.Groups["alphaCode"].Value.ToString();
    string partNumber = matches.Groups["partNumber"].Value.ToString();
    string url = "<a href='www.mysite.com/parts/{0}'>{1}:{0}</a>";
    url = string.Format(url, alphaCode, partNumber);
    return url;

}

您可以将模型中的数据传递给此辅助方法。