【问题标题】:Regex: Find and modify multiple matches正则表达式:查找和修改多个匹配项
【发布时间】:2014-03-14 06:53:59
【问题描述】:

我有一个HTML 字符串,其中包含一些img 标签。我必须在每个 img 标签中找到并修改 src 属性。例如

原来的标签是:

<img src="http://some.domain.com/images/uncat-images/?file=vx1qro62da5th39u.jpeg&dimension=50" style="color:#2345f1" />

我想获取file 查询字符串的值,将其映射到一些代码中,获取新名称,然后用一个新名称修改整个src 属性。

例如在给定的示例中,file 名称是 vx1qro62da5th39u.jpeg。所以,我希望它从地图中找到新值。例如,它将是newfilename.png。现在我想用这个替换整个 src 值:

/newroot/images/newfilename.png

这意味着img应该是这样的:

<img src="/newroot/images/newfilename.png" style="color:#2345f1" />

我有这个Regex,它给了我一个命名组中的src 值:

var regex = new Regex("<img.+?src=[\\\"'](?<URL>.+?)[\\\"'].*?>", RegexOptions.Compiled | RegexOptions.IgnoreCase);

说实话,我在这里被困了大约 2 个小时):

var regex = new Regex("<img.+?src=[\\\"'](?<URL>.+?)[\\\"'].*?>", RegexOptions.Compiled | RegexOptions.IgnoreCase);
var html = "My html string with several img tags...";
var matches = regex.Matches(html);
foreach (Match match in matches){
     // I'm right here ):       
}

有没有人知道如何继续?提前致谢。

【问题讨论】:

    标签: c# regex c#-4.0


    【解决方案1】:

    您需要使用Regex.Replace 方法使用MatchEvaluator。 示例:

    Regex rx = new Regex("(?<=<img[^>]*src=\")[^\"]+", RegexOptions.IgnoreCase);
    string html = "My html string with several img tags...";
    string newHtml = rx.Replace(html, m => "/newroot/images/" + m.Value);
    

    我修改了你的正则表达式,使用正向回溯,所以它只捕获 src 属性的内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-01
      • 1970-01-01
      • 2019-02-27
      • 2014-10-08
      相关资源
      最近更新 更多