我有以下两种模式,如果在字符串中找到或找到匹配项,则需要找到匹配项,然后转到下一场比赛。
对于我一直在使用的一种模式
MatchCollection m0 = Regex.Matches(file, @"<ul class=""Information"">[\s\n\t.]+<img src=""http://test/images/I/test.gif"">",
RegexOptions.Singleline);
然后循环匹配并提取我需要的细节
我需要的第二种模式是
MatchCollection m1 = Regex.Matches(file, @"<ul class=""Information"">[\s\n\t.]+ <a href=""http://www.test.com/test/""\w+",
RegexOptions.Singleline);
正则表达式是否可以将这些组合成一个搜索,例如使用OR?
答案 0 :(得分:3)
对于那里的仇敌,这不一定是带有正则表达式问题的解析HTML。他的问题的根源是他正在寻找正则表达式中的Disjunction功能。
虽然@dtb对于hge的正则表达式可能是正确的,但对于简单的情况(小输入和简单模式),如果您知道何时使用它,则不一定是个坏主意。
这是正则表达式中的一个简单解决方案。
string pattern = @"<ul class=""Information"">[\s\n\t.]+" +
@"(?:<img src=""http://test/images/I/test.gif"">|" +
@"<a href=""http://www.test.com/test/""\w+)";
MatchCollection m0 = Regex.Matches(file, pattern, RegexOptions.Singleline);
在这里做了什么@Paul我们已经把你比赛的两个尾随组件放到一个非捕获组中:(?: )
。这样可以确保它不会弄乱您的捕获组,但是如果需要,欢迎您捕获它。
从这里开始,我们使用OR运算符|
将组拆分为捕获其中一个。
(?:<img src="http://test/images/I/test.gif">|<a href="http://www.test.com/test/"\w+)
这是第二部分的结果模式匹配。
注意:如果你偶尔这样做(即一个循环)你应该编译你的正则表达式,它会执行得更快。