Reqex模式,返回指定字符串周围的html标签

时间:2018-10-17 11:15:17

标签: c# html regex

我一直在尝试制作正则表达式模式,该模式将在剃刀内返回具有特定字符串序列的最里面的html标签。请注意,我对regex不太了解。

让我们具有输入到Regex.Match

的基本cshtml结构。
@{
    <div id="Base">
        <div id="MainDiv">
            <span id="HeaderSpan">
                Header
            </span>

            TestText1
        </div>
        @{
             var innerRazorVariable = "test"
         }
    </div>

    var razorVariable = "test";
}

我正在寻找一种模式,如果“ Header”为SpecifiedString,则会返回此字符串

<span id="HeaderSpan">
    Header
</span>

我设法写出了一种模式,该模式将重新调谐大多数带有指定字符串的内部剃刀的内容,

Regex.Match(source, "@{.*(@{.*?" + SpecifiedString + ".*?})|.*}");

那很好。如果Match包含group,则该group是最内部的剃刀定义及其内容。如果不是,则Value中的Match是最里面的剃刀及其内容。

问题是带有最内部的html标记的。我试图使它像Razor Regex一样写,但没有成功。我最近得到的是与

(<.*?>).*SpecifiedString .*(<\/.*?>)

Online Regex

我知道为什么它不能按我的意愿工作,但是我不知道该怎么做。

我尝试过的第二个解决方案是

(?'html'<.*?>)|(SpecifiedString)

Online Regex

然后我试图通过组和捕获上的foreach找到最内部的html标记,但是我无法使其正常工作,所以我将其删除。

  

编辑。

其他信息。如果“指定文本”不在任何html标记中,则regex不返回任何内容。我试图找出剃刀中指定的字符串是html还是c#代码。

我的问题。

是否甚至可以像这样编写正则表达式模式?

1 个答案:

答案 0 :(得分:2)

  

Don't use Regex to handle HTML tags

但是我认为您可以使用更好的正则表达式,如下所示:

<[^>]+>\s*Header\s*<[^>]+>

Regex Demo

说明:

<[^>]+>    start with '<' followed by non-'>' characters and end with '>'
\s*        zero or many of whitespace characters

注意:在可以指定更多规范的情况下,使用.*在regex中是如此普遍。