C# 使用正则表达式查找reCaptcha ID
好的,我一直在尝试从我正在下载的web源中提取reCaptcha ID,我打算用Regex做这件事,用它包含的内容提取行,然后从那里提取ID(如果有意义的话) 我现在是这样做的:C# 使用正则表达式查找reCaptcha ID,c#,regex,C#,Regex,好的,我一直在尝试从我正在下载的web源中提取reCaptcha ID,我打算用Regex做这件事,用它包含的内容提取行,然后从那里提取ID(如果有意义的话) 我现在是这样做的: WebClient W = new WebClient(); W.Encoding = System.Text.Encoding.UTF8; string pattern = "recaptcha_challenge_field"; string Sour
WebClient W = new WebClient();
W.Encoding = System.Text.Encoding.UTF8;
string pattern = "recaptcha_challenge_field";
string SourceCode = W.DownloadString("http://www.xtremetop100.com/in.php?COLLCC=4025385947&COLLCC=1765882190&site=1132330052");
foreach (string Match in Regex.Split(SourceCode, Environment.NewLine))
{
if (Regex.IsMatch(Match, pattern, RegexOptions.IgnoreCase))
{
MessageBox.Show(Match);
}
}
问题是,它只显示了除了带有“模式”的行之外的整个页面源代码。我试着改变编码类型,因为我认为它会以一个大句子的形式返回源代码,但我想这不是答案。有人来帮忙吗?谢谢你。首先,你的名字很糟糕! 局部变量的名称应该以小写字母开头,所以“sourceCode”、“match”。大号字母表示“匹配”是类而不是变量 第二,为什么只使用从正则表达式类拆分字符串来拆分新行?使用内置字符串方法:
foreach (string line in sourceCode.Split(new string[] { Environment.NewLine }, StringSplitOptions.None))
现在。。。如果您注意到,我更改了变量的名称,那么现在您的代码如下
if (Regex.IsMatch(line, pattern, RegexOptions.IgnoreCase))
{
MessageBox.Show(line);
}
你们会看到很明显,代码做了你们想做的:若线条和模式匹配,那个么就显示整条线条
另一件事:你的正则表达式模式是什么?这更像是比较来检查是否匹配。尝试阅读更多关于regex的内容。您的模式应该更像
recaptcha\u challenge\u field=([0-9]+)
。我不太清楚,因为你发布的链接只包含“刷新”元标记
并尝试使用方法代替Regex.IsMatch。它为您提供了更多信息,不仅是字符串是否匹配您的模式,还提供了您捕获的组。但它仍然为我返回了整个源代码。你呢?对我来说没有回报,因为我不知道你在找什么。页面为空,或充满html,但字段没有任何值。您是否将代码更改为使用
Regex.Match
?你是否改变了模式,使用了一些捕获组?如果是这样,则不应获得孔线。仅供参考:如果您创建了正确的图案,您将不必在第一个位置分割线。但首先尝试单行,这更容易学习如何生成好的正则表达式,只需尝试将模式设置为“