【问题标题】:Find and replace - should I use Regex?查找和替换 - 我应该使用正则表达式吗?
【发布时间】:2011-12-19 13:30:34
【问题描述】:

我需要创建一个简单的标记修复,并且我已经完成了我需要的所有操作,例如粗体和斜体等。但这比我迄今为止所做的要困难一些,而且我不知道该怎么做。基本上我的输入很简单:

[imgGroup="group1"]
image1.jpg
[/imgGroup]

如您所见,我传递了一个参数group1,在里面我有image1。我需要把它转换成一个链接,里面有这个图像并在 rel 标记中分组,如下所示:

<a href="image1.jpg" rel="group1" >
   <img src="image1.jpg" />
</a>

我认为我需要使用正则表达式来解决这个问题,但是我只知道如何在 2 个标签之间找到一些东西,而不是这个问题...我正在使用带有 C# 的 ASP.NET MVC3。

【问题讨论】:

  • 有什么理由重新发明另一个标记而不是使用已经设计好的工具,例如markdownsharp?不要重新发明轮子。不要使用正则表达式。你会被黑客攻击,因为几乎不可能预见所有可能的情况。
  • 是的,有。我正在尝试传递图像以将它们与 Shadobox.js 插件一起使用。它需要特定的标记 - shadowbox-js.com/usage.html
  • 第一个和第二个[imgGroup]标签之间可以有多个图像文件名吗?如果是这样,它们将如何划分? (空格、换行符等)可能有助于显示带有多个图像的示例输入和输出。
  • 不,我认为如果 [imgGroup] 之间有多个图像会容易得多。我只会放许多具有相同组名的 [imgGroup]。
  • 正则表达式替换什么语言?

标签: c# asp.net asp.net-mvc regex asp.net-mvc-3


【解决方案1】:

您可以使用 RegEx 中的命名组进行匹配,然后您可以将它们重新组合成您想要的顺序:

var regex = new RegEx(("$1(\d\s)$2([a-z])");  // Set up your regex with named groups
var result = regex.Replace("inputstring", "$2 $1");  // Replace input string with the given text, including anything matched in the named groups $1 and $2

但请注意,带有 URL 和 HTML 解析之类的 RegEx 可能会非常非常快地变成超出您最疯狂梦想的恐怖;)

祝你好运!

Named groups for RegEx in dot net

【讨论】:

  • 谢谢,但由于我将是唯一可以访问此标签的人,所以我认为没问题。
【解决方案2】:

这是我给你的建议:

var regex = new Regex(@"\[imgGroup=" + "group1" + @"\]\s*(?<Content>\S*)\s*\[imgGroup\]");
var newValue = regex.Replace(oldValue, @"<a href=""$1"" rel=""group1"" ><img src=""$1"" /> </a> );

这应该符合您的预期。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多