Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正则表达式解析并替换C#/.NET中的img src?_C#_Regex_Image_Expression - Fatal编程技术网

正则表达式解析并替换C#/.NET中的img src?

正则表达式解析并替换C#/.NET中的img src?,c#,regex,image,expression,C#,Regex,Image,Expression,啊, 我有个问题,看;我有这样的字符串: 它们的格式不一致 我需要像这样解析字符串,并返回以下内容: 变化: 除去图像文件所在的即时目录以外的所有内容 该目录不是子目录,而是在文件名前加上前缀 因此,如果文件当前位于/blabla/bla/blaaaah/pickles/pickle.png中 然后我希望IMG SRC属性为pickles-pickle.png 现在,我一直在尝试用正则表达式来做这个,但是3个小时后,我发现了一些关于我自己的东西。。。我对regex很在行。我可能会在这里呆上几

啊,

我有个问题,看;我有这样的字符串:

它们的格式不一致

我需要像这样解析字符串,并返回以下内容:

变化:

  • 除去图像文件所在的即时目录以外的所有内容
  • 该目录不是子目录,而是在文件名前加上前缀 因此,如果文件当前位于/blabla/bla/blaaaah/pickles/pickle.png中

    然后我希望IMG SRC属性为pickles-pickle.png

    现在,我一直在尝试用正则表达式来做这个,但是3个小时后,我发现了一些关于我自己的东西。。。我对regex很在行。我可能会在这里呆上几个星期,但我永远也到不了任何地方

    因此,我向这个美好的社区询问两件事:

  • 你会怎么做?正则表达式是正确的答案吗?我需要能够解析IMG标记中的任何SRC属性(无论它们是否具有高度/宽度或其他属性)
  • 你会推荐什么资源让我用.NET学习正则表达式
  • 现在对于手头的问题,我想我可以做一个字符串

  • 找到IMG标记,并获取周围“”的索引
  • 在这两个实例之间查找“SRC=”和“”的索引(空格)
  • 在src和空间索引之间查找“/”的最后一个索引
  • 在src和空间索引之间查找倒数第二个“/”索引
  • 替换。。。呃不,去掉,。。。“/”的倒数第二个实例之前的所有内容
  • …字符串。将剩余的“/”替换为“-”
  • ……我。。我想这样行吗 但该死的,这太难看了。正则表达式会更漂亮,你不觉得吗

    有什么建议吗


    注意:我把它标记为“家庭作业”,但它不是家庭作业。我自愿在下班后工作,以拯救公司20万美元。这是(对我来说)令人难以置信的复杂谜题的最后一块。当然,我看不到那20万美元中的一分钱,但我做这件事看起来不错

    (?
    (?
    (?
    (?)要获取标签,我建议使用。它比在整个HTML页面上使用regex更安全

    (?<=src=)"[^" ]*\/(?=[^\/"]*\/)
    
    使用类似的方法获取图像节点:

    HtmlDocument doc = new HtmlDocument();
    doc.LoadHtml(html);
    var imgs = doc.DocumentNode.SelectNodes("//img");
    
    使用类似的方法获取/设置属性:

    foreach (var img in imgs)
    {
    string orig = img.Attributes["src"].Value;
    //do replacements on orig to a new string, newsrc
    img.SetAttributeValue("src",newsrc);
    }
    
    那么,你应该做什么样的替换呢?我同意使用正则表达式要优雅得多。像这样的东西毕竟是它的用途

    像这样的事情应该可以做到:

    string s = @"/sites/it_kb/SiteAssets/Pages/exploding%20the%20VDI%20vDesktop/VDI3.PNG";
    string n = Regex.Replace(s,@"(.*?)\/([^\/]*?)\/([^\/]*?)$",@"/$2-$3");
    
    您可以使用一些资源来学习C#Regexing:


    要获得标签,我建议使用。它比在整个HTML页面上使用正则表达式更安全

    使用类似的方法获取图像节点:

    HtmlDocument doc = new HtmlDocument();
    doc.LoadHtml(html);
    var imgs = doc.DocumentNode.SelectNodes("//img");
    
    使用类似的方法获取/设置属性:

    foreach (var img in imgs)
    {
    string orig = img.Attributes["src"].Value;
    //do replacements on orig to a new string, newsrc
    img.SetAttributeValue("src",newsrc);
    }
    
    那么,你应该做什么样的替换呢?我同意使用正则表达式要优雅得多。像这样的东西毕竟是它的用途

    像这样的事情应该可以做到:

    string s = @"/sites/it_kb/SiteAssets/Pages/exploding%20the%20VDI%20vDesktop/VDI3.PNG";
    string n = Regex.Replace(s,@"(.*?)\/([^\/]*?)\/([^\/]*?)$",@"/$2-$3");
    
    您可以使用一些资源来学习C#Regexing:


    要获得标签,我建议使用。它比在整个HTML页面上使用正则表达式更安全

    使用类似的方法获取图像节点:

    HtmlDocument doc = new HtmlDocument();
    doc.LoadHtml(html);
    var imgs = doc.DocumentNode.SelectNodes("//img");
    
    使用类似的方法获取/设置属性:

    foreach (var img in imgs)
    {
    string orig = img.Attributes["src"].Value;
    //do replacements on orig to a new string, newsrc
    img.SetAttributeValue("src",newsrc);
    }
    
    那么,你应该做什么样的替换呢?我同意使用正则表达式要优雅得多。像这样的东西毕竟是它的用途

    像这样的事情应该可以做到:

    string s = @"/sites/it_kb/SiteAssets/Pages/exploding%20the%20VDI%20vDesktop/VDI3.PNG";
    string n = Regex.Replace(s,@"(.*?)\/([^\/]*?)\/([^\/]*?)$",@"/$2-$3");
    
    您可以使用一些资源来学习C#Regexing:


    要获得标签,我建议使用。它比在整个HTML页面上使用正则表达式更安全

    使用类似的方法获取图像节点:

    HtmlDocument doc = new HtmlDocument();
    doc.LoadHtml(html);
    var imgs = doc.DocumentNode.SelectNodes("//img");
    
    使用类似的方法获取/设置属性:

    foreach (var img in imgs)
    {
    string orig = img.Attributes["src"].Value;
    //do replacements on orig to a new string, newsrc
    img.SetAttributeValue("src",newsrc);
    }
    
    那么,你应该做什么样的替换呢?我同意使用正则表达式要优雅得多。像这样的东西毕竟是它的用途

    像这样的事情应该可以做到:

    string s = @"/sites/it_kb/SiteAssets/Pages/exploding%20the%20VDI%20vDesktop/VDI3.PNG";
    string n = Regex.Replace(s,@"(.*?)\/([^\/]*?)\/([^\/]*?)$",@"/$2-$3");
    
    您可以使用一些资源来学习C#Regexing:

    更换此

    (?i)(?<=<img\s[\s\S]*?src=")(?:[^"]*\/)+(?=[^"]*\/)([^\/]*)\/([^"]+)
    
    替换这个

    (?i)(?<=<img\s[\s\S]*?src=")(?:[^"]*\/)+(?=[^"]*\/)([^\/]*)\/([^"]+)
    
    替换这个

    (?i)(?<=<img\s[\s\S]*?src=")(?:[^"]*\/)+(?=[^"]*\/)([^\/]*)\/([^"]+)
    
    替换这个

    (?i)(?<=<img\s[\s\S]*?src=")(?:[^"]*\/)+(?=[^"]*\/)([^\/]*)\/([^"]+)
    

    这是相当不安全的,考虑到其他东西可能有/在其中,你应该添加“src=”infront@Vajura它将只针对
    src=”“
    。考虑到其他东西中可能有/你应该添加“src=”,这是相当不安全的infront@Vajura它将只针对
    src=“”
    。考虑到其他东西中可能有/你应该添加“src=”,这是非常不安全的infront@Vajura它将只针对
    src=”“
    。考虑到其他东西中可能有/你应该添加“src=”,这是相当不安全的infront@Vajura它将只针对
    src=“”
    。您可以使用正则表达式解析html,但这不是最佳做法。查看您为什么要这样做。您可以使用正则表达式解析html,但这不是最佳做法。查看您为什么要这样做。您可以使用正则表达式解析html,但这不是最佳做法。查看您为什么要这样做。您可以使用正则表达式解析html,但这不是最佳做法。查看您为什么要使用正则表达式我会做的。