如何在同一个字符串C#中处理多个正则表达式

时间:2016-04-28 19:59:30

标签: c# regex asp.net-mvc

我正在尝试用正则表达式在同一个字符串中处理多个不同的情况。但是当我使用下面的代码时,只有最后一个表达式才有效。所以dobbel星(**)会像它一样张贴,但下划线(_)将由replace()函数处理。

[HttpPost]
[ValidateInput(false)]
 public ActionResult Comment(Models.CommentModel s)
    {
        Regex fat = new Regex(@"\*\*(.*?)\*\*");
        Regex italic = new Regex(@"_(.*?)_");

       s.comment = fat.Replace(HttpUtility.HtmlEncode(s.comment), "<b>$1</b>");
       s.comment = italic.Replace(HttpUtility.HtmlEncode(s.comment), "<i>$1</i>");

       var db = new WebApplication1.Models.ApplicationDbContext();

        if (ModelState.IsValid)
        {

            if (file != null)
        {
            db.Comments.Add(s);
            db.SaveChanges();
            return RedirectToAction("Comment");
        }
        return View(s);
    }

为了减少代码量,我尝试将italicfat字符串合并在一起,如下所示:Regex(@"\*\*(.*?)\*\*|_(.*?)_");但是我还有另一个问题,Regex如何知道差异?

1 个答案:

答案 0 :(得分:1)

因为你要编码相同的html 两次

   // comment : sampletext **bold** _italic_ stuffsss

   s.comment = fat.Replace(HttpUtility.HtmlEncode(s.comment), "<b>$1</b>");
   // comment : sampletext <b>bold</b> _italic_ stuffsss

   s.comment = italic.Replace(HttpUtility.HtmlEncode(s.comment), "<i>$1</i>");
   // comment : sampletext &lt;b&gt;bold&lt;/b&gt; <i>italic</i> stuffsss

完成替换后,只需编码一次:

Regex fat = new Regex(@"\*\*(.*?)\*\*"); // btw this is called `bold` not `fat`
Regex italic = new Regex(@"_(.*?)_");

s.comment = HttpUtility.HtmlEncode(s.comment)

s.comment = fat.Replace(s.comment, "<b>$1</b>");
s.comment = italic.Replace(s.comment, "<i>$1</i>");