我有以下内容:
(?<=>)(\w*)(?=<)
它抓取两个尖括号>
和<
内所有出现的单词。
但是我只想抢第三次。
我在上面的正则表达式中尝试了几次{2}
的迭代(作为第三次),但到目前为止还没有任何效果。任何想法都会有所帮助
答案 0 :(得分:0)
如果您使用零宽度断言,例如向前看或向后看,那么您将永远不会跳过n个项目。你必须吃#34;字符,以便处理不包括用于上一场比赛的字符。
下面的表达应该可以解决问题。它匹配两个紧密支架的实例,而不是紧密支架,紧密支架与第三个紧密支架匹配,而不是紧密支架,紧密支架。要获取括号内的内容,请使用Match.Groups
和GroupCollection.Captures
。
var re = new Regex(@"(?:(?:>[^<]+<.*?){2}>)([^<]+)(?:)");
var matches = re.Matches(@"<a>1</a><b>2</b><a>3</a><b>4</b><e>5</e><a>6</a>");
foreach (Match match in matches) {
Console.WriteLine(match.Groups[1].Captures[0]);
}
// output:
// 3
// 6
是的,这将是一个非常糟糕的HTML解析器,但对于快速而肮脏的黑客来说很好。