[英]Regex options matching multi-line as well as ignoring the case
我有一些格式不正确的HTML,有时候“丢失了。此外,它有时会显示大写情况,而其他时候是较小的情况:
<DIV class="main">
<DIV class="subsection1">
<H2>
<DIV class=subwithoutquote>StackOverflow</DIV></H2></DIV></DIV>
我想匹配多线并忽略这种情况。 但以下的模式似乎并没有起作用。 (对于连接,我也尝试过|而不是&)
const string pattern = @"<div class=""?main""?><div class=""?subsection1""?><h2><div class=""?subwithoutquote""?>(.+?)</div>";
Match m = Regex.Match(html, pattern, RegexOptions.IgnoreCase & RegexOptions.Singleline);
或者我应该在模式中添加\\ n *来解决多行问题?
第一个问题是您不允许在标签之间的正则表达式中使用空格。 正确的正则表达式(在Rubular中测试)是:
<div class=""?main""?>\s*<div class=""?subsection1""?>\s*<h2>\s*<div class=\"?subwithoutquote\"?>(.+?)<\/div>\s*
注意添加了几个\\s*
条目。
第二个问题是你没有正确地连接选项。
你的代码:
Match m = Regex.Match(html, pattern, RegexOptions.IgnoreCase & RegexOptions.Singleline);
由于这些是位标志,因此Bitwise-And( &
运算符)是一个错误的标志。 你想要的是Bitwise-Or( |
运算符)。
按位 - 并且意味着“如果在这两个位中都设置了该位,则保持设置;否则,取消设置。您需要Bitwise-Or,这意味着”如果在其中任何一个中设置该位,则设置它; 否则,取消它。“
在这种情况下,您需要将它们组合在一起。
const string pattern = @"<div class=""?main""?><div class=""?subsection1""?><h2><div class=""?subwithoutquote""?>(.+?)</div>";
Match m = Regex.Match(html, pattern, RegexOptions.IgnoreCase | RegexOptions.Singleline)
编辑:将您的RegEx更改为以下内容......
const string pattern = @"<div class="?main"?>\s*<div class="?subsection1"?>\*+<h2>\s*<div class="?subwithoutquote"?>(.+?)</div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.