我尝试解析属性中的文字: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 "/>
答案 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);
}