Regex,找到匹配时,有两个模式,c#

本文关键字:模式 两个 Regex | 更新日期: 2023-09-27 18:15:40

我有以下两个模式,如果在字符串中找到一个或一个,则需要找到一个匹配,然后移动到下一个匹配。

对于一个模式,我一直使用

 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 ?

Regex,找到匹配时,有两个模式,c#

免责声明

对于那些讨厌的人来说,这不是一个用正则表达式解析HTML的问题。他的问题的根源是他正在寻找regex中的Disjunction功能。

解决方案

虽然@dtb对于html的regex可能是正确的,但对于简单的情况(小输入&简单的模式)如果你知道什么时候使用它,这并不一定是个坏主意。

在正则表达式中这是一个简单的解决方案。

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在这里所做的是,我们已经采取了你的比赛的两个尾随组件,并将它们放入一个非捕获组:(?: )。这可以确保它不会扰乱你的捕获组,但是如果你需要的话,欢迎你捕获它。

从这里开始,我们使用或操作符|将组拆分为捕获其中一个或另一个。

(?:<img src="http://test/images/I/test.gif">|<a href="http://www.test.com/test/"'w+)

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

注意:如果你在一段时间内多次这样做(即循环),你应该编译你的regex,它会执行得更快。