解析属性中的文本

时间:2017-05-09 09:00:38

标签: c# find webbrowser-control

我尝试解析属性中的文字:src="/captcha?58428805" 每次它都不同时,我需要文字/captcha?58428805 我怎么解析它?

示例元素:

<img style="margin: 0;height:40px;width:115px;" 
     width="115" height="40"
     id="captcha" class="captcha" src="/captcha?58428805" 
     alt="Verification code with letters and numbers "/>

2 个答案:

答案 0 :(得分:0)

@Pikoh在评论中说,有各种各样的方法,我为你写了正则表达式版本。根据html字符串的变体,正则表达式字符串可能会略有变化。

    static void Main(string[] args)
    {
        string input = "your html string";
        string strReg = @"<img style=.+?src=""(.+?)""";
        Regex reg = new Regex(strReg,
            RegexOptions.Compiled | RegexOptions.Singleline);
        string youneed = reg.Match(input).Groups[1].Value;
        Console.WriteLine(youneed);
        Console.ReadLine();
    }

答案 1 :(得分:0)

由于雷阳的答案可能是正确的,如果src=SRC_VALUE恰好在<image..之后,它会失败:<img src="/captcha?58428805" ...SOME_OTHER ATTR..>

这个正则表达式可能会有所帮助:

string toTest = @"<img style=""margin: 0;height:40px;width:115px;"" width=""115"" height=""40"" id=""captcha"" class=""captcha"" src=""/captcha?58428805"" alt="" Verification code with letters and numbers ""/>";
var regex = new Regex(@"<img.{0,}src=""(.+?)""");
Console.WriteLine(regex.Match(toTest).Groups[1].Value);

<img.{0,}src="(.+?)"的说明(请注意,上述代码中的引号已转义):

  

<img - 字符串应包含<img

     

.{0,} - 在<img

之后的行终止符之外的任何字符从零到无限次出现的匹配      

src=" - 与src="

之后的<img部分匹配      

(.+?)" - .表示除行终结符之外的任何字符,(+)发生1次或无限次,(?lazy,并且应该结束在"

即使您的src字符串包含多个toTest标记,此正则表达式也只会返回上一个<img>值。因此,您需要Split每个<img>标记的字符串,然后应用上面的正则表达式:

string toTest = @"<img style=""margin: 0;height:40px;width:115px;"" width=""115"" height=""40"" id=""captcha"" class=""captcha"" src=""/captcha?58428805"" alt="" Verification code with letters and numbers ""/><img style=""margin: 0;height:40px;width:115px;"" width=""115"" height=""40"" id=""captcha"" class=""captcha"" src=""/captssscha?5842sss8805"" alt="" Verification code with letters and numbers ""/>";
var imgArr = Regex.Split(toTest, @"(<img[\s\S]+?\/>)").Where(l => l != string.Empty).ToArray(); //split the html string by <image> tag
var srcRegex = new Regex(@"<img.{0,}src=""(.+?)""",RegexOptions.Compiled | RegexOptions.Singleline);

foreach(string imgTag in imgArr) {
    Console.WriteLine(srcRegex.Match(imgTag).Groups[1].Value);
}