我试图忽略我的正则表达式中的一些很少发生的文本。我的正则表达式是
var Runners = new Regex(@"(?<=y, |f, |m, )(.*?)(?= runners\))").Matches(set);
有问题的行是
Anthony Mildmay, Peter Cazalet Memorial Handicap Chase (Sponsored By Ing Barings) <span class=aside>3m 5f 110y</span></h2><ul class=list><li>(5yo+, 3m 5f 110y, 16 runners)
还有一个额外的&#39; y,&#39;在开头所以它收集了太多的数据,就像在这个例子中我想要的只是我的正则表达式找到&#39; 16&#39;。
我不认为这种情况经常发生,但是在216424的记录134中出现此错误。是否有一种方法可能只是在跑步者后面寻找10个空格来寻找&#39; y,&#39;或者&#39; f,&#39;或者&#39; m,&#39;?或者找一个数字,然后是&#39; y,&#39;或者&#39; f,&#39;或者&#39; m,&#39;?
答案 0 :(得分:1)
这可能对您有用:
(?<=[yfm],\s*)\d+(?=\s*runners\))
使用.*
始终是“危险的”(因为它可能匹配与预期不同的东西),即使它不是贪婪的。尽量使您的模式尽可能具体,以获得正确的匹配。
答案 1 :(得分:0)
使用Lucero的示例适用于您的字符串。只有你必须删除的是\ s中的'*'(似乎抛出模式错误)。
(?<=[yfm],\s)\d+(?=\s*runners\))
将你的字符串放在regex101中并使用该表达式,它找到16。