繁体   English   中英

正则表达式选项匹配多行以及忽略大小写

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM