【问题标题】:Find pattern with RegEx and replace使用 RegEx 查找模式并替换
【发布时间】:2018-01-27 06:39:05
【问题描述】:

我有以下两种情况,我需要替换 href=".." 值或 src=".." 值。

模式是

  • <img src="/~/media/75F8BA07F3BC4C3F91A71D6A049E6BD4.ashx" alt="" />
  • <a href="/~/link.aspx?_id=2CD5F3FBD0334A7DA7CB81F9520BEED5&_z=z">Some text</a>

GUID 总是 32 个字符长,找到后,我需要将元素的整个 href og src 标记替换为新值。

关于如何做到这一点的任何想法?

【问题讨论】:

  • 你能展示一下替换后字符串的样子吗?
  • @Gurman 当然。之前: 之后: 之前:一些文字 之后:一些文字

标签: c# asp.net regex


【解决方案1】:

这是你需要的模式:

(src="(\/~\/media\/([A-Z0-9]{32})\.ashx)")|(href="(\/~\/link\.aspx\?_id=([A-Z0-9]{32})&_z=z"))

看看DEMO

【讨论】:

  • 但这需要每个 src 和 href 标签中的所有内容,对吗?我不需要 - 只有 src 和 HREF 标记与我的模式匹配(即包含 32 个字符 GUID)。还有其他 src 和 href 值,它们不包含 GUID,因此不应替换。
  • 你怎么知道图片标签中的路径总是一样的?
  • @brother 我编辑了我的答案和演示请看一下
  • @AshkanMobayenKhiabani 谢谢。我如何从中提取 GUID?我需要 GUID 在数组中查找,看看我需要用什么替换值?
  • 我编辑了我的答案和演示,只需将 GUID 放在括号之间,GROUP3 将是 GUID
【解决方案2】:

这是替换您描述的图像标签的代码:

string input = "<img src="/~/media/75F8BA07F3BC4C3F91A71D6A049E6BD4.ashx" alt="" />";
input = Regex.Replace(input,
                      @"<img [^>]*src=""/~/([^/]+)/[A-Z0-9]{32}[^""]*""[^>]*/>",
                      "<img src=\"/$1/myfolder/myimage.png\" alt=\"\" />");

我会单独替换锚标记,并将其留给您作为后续练习。

顺便说一句,使用正则表达式操作 HTML 通常是一种不好的做法,因此如果可能的话,您可能希望摆脱这种做法。

【讨论】:

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