正则表达式,当有两种模式时找到匹配,C#

时间:2011-11-26 00:35:24

标签: c# regex

我有以下两种模式,如果在字符串中找到或找到匹配项,则需要找到匹配项,然后转到下一场比赛。

对于我一直在使用的一种模式

 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?

1 个答案:

答案 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+)

这是第二部分的结果模式匹配。

注意:如果你偶尔这样做(即一个循环)你应该编译你的正则表达式,它会执行得更快。