正则表达式选择具有空格的图像

时间:2017-03-29 11:11:23

标签: c# regex

我尝试了几种组合,但接缝最终会插入每个可能的标志。

我有一个看起来像

的正则表达式
<img[^>]*?src=["']([\w:\\\/\s\S]*[.a-zA-Z]{3,})[^>]*?>

我想从图像中选择src部分。

示例网址如

Sample <img alt="foo" src="c:\my-folder\contains.dot\and space\in myImagePath.png" title="bar" >

但是这也选择了标题,我想停在src的结尾"

我还尝试了一些更多的安排,但结果相同或没有......

当第一个"被关闭时,是否会在"停留?

原始数据

从VS2017控制台复制的原始HTMLCode

<style>*{font-family: Arial, Helvetica, sans-serif;}</style><p><img src=\"C:\\Users\\JustMe\\Desktop\\de mo1.png\" width=\"1635\" height=\"989\" /></p>\n<p>&nbsp;</p>

我原来使用的代码

using System.Text.RegularExpressions;

...

public List<string[]> FetchLinksFromSource(string htmlSource)
    {
        List<string[]> links = new List<string[]>();

        int i = 1;
        string regexImgSrc = @"<img[^>]*?src\s*=\s*[""']?([^'"" >]+?)[ '""][^>]*?>";
        MatchCollection matchesImgSrc = Regex.Matches(htmlSource, regexImgSrc, RegexOptions.IgnoreCase | RegexOptions.Singleline);
        foreach (Match m in matchesImgSrc)
        {
            string[] matches = new string[3];
            string href = m.Groups[1].Value;
            matches[0] = href;
            matches[1] = new Uri(href).ToString();
            matches[2] = "imageID_" + i++.ToString();
            links.Add(matches);
        }
        return links;
    }

如果图像或路径有空格,此代码会崩溃!

2 个答案:

答案 0 :(得分:1)

更改为:

<img[^>]*?src=["']([^"']*[.a-zA-Z]{3,})[^>]*?>
                   ^^^^^ 

live

答案 1 :(得分:1)

我更喜欢使用\1作为src=的结尾,并在开头使用相同的“或”:

<img[^>]*?src=("|')(.*?)\1[^>]*?>

Demo