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 ?
免责声明
对于那些讨厌的人来说,这不是一个用正则表达式解析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,它会执行得更快。