我一直在尝试制作正则表达式模式,该模式将在剃刀内返回具有特定字符串序列的最里面的html标签。请注意,我对regex不太了解。
让我们具有输入到Regex.Match
@{
<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 .*(<\/.*?>)
我知道为什么它不能按我的意愿工作,但是我不知道该怎么做。
我尝试过的第二个解决方案是
(?'html'<.*?>)|(SpecifiedString)
然后我试图通过组和捕获上的foreach找到最内部的html标记,但是我无法使其正常工作,所以我将其删除。
编辑。
其他信息。如果“指定文本”不在任何html标记中,则regex不返回任何内容。我试图找出剃刀中指定的字符串是html还是c#代码。
我的问题。
是否甚至可以像这样编写正则表达式模式?
答案 0 :(得分:2)
但是我认为您可以使用更好的正则表达式,如下所示:
<[^>]+>\s*Header\s*<[^>]+>
说明:
<[^>]+> start with '<' followed by non-'>' characters and end with '>'
\s* zero or many of whitespace characters
注意:在可以指定更多规范的情况下,使用.*
在regex中是如此普遍。