所以我正在研究一些必须正则表达一些东西的代码。 一般来说,它的工作除了一个正则表达式,它在第一场比赛中返回很多东西,但之后在其他所有比赛中按预期工作。
我使用regex101.com构建正则表达式,它看起来像这样:
>(?<ev>[0-9]{1,3}\s(HP|Atk|Def|SpD|SpA|Spe))<
c#中的代码如下所示:
pattern = ">(?<ev>^[0-9]+${1,3}\\s(HP|Atk|Def|SpD|SpA|Spe))<";
foreach (Match match in Regex.Matches(html, pattern))
{
Console.WriteLine(match.Groups["ev"].Captures[0].Value);
}
html im regexing就是这样:http://pokedex.project-sato.net/files/localfile.html
我也测试过并且不起作用的示例:http://pastebin.com/6H0QnFBP
控制台中的输出为空。
编辑:
输出应如下所示:
4 Def
252 SpA
252 Spe
答案 0 :(得分:2)
尝试调整您的第一个匹配组,因为您当前拥有HP
,这将匹配一个或多个数字,三次。
您可能需要1-3位数字以及您的某个属性(例如Atk
,// This will match 1-3 digits followed by one of your properties
pattern = ">(?<ev>\d{1,3}\\s(HP|Atk|Def|SpD|SpA|Spe))\<");
等),这些属性将使用以下表达式:
^
这也删除了$
和onDowngrade()
的开头和约束,因为这些值可能会在整个输入中找到,因此您不希望将其限制为单行。
示例强>
你可以see an example of this that uses a snippet of your targeted HTML file as input here。