【发布时间】:2019-03-22 01:19:34
【问题描述】:
我一直在尝试制作正则表达式模式,它将返回带有剃刀内特定字符串序列的最内部 html 标记。请注意,我对正则表达式不是很有经验。
让我们有基本的cshtml结构,输入到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 是最内在的剃刀声明及其内容。如果不是Match 的Value 是最内在的剃须刀及其内容。
问题在于最内部的 html 标签。我试图让它与 Razor Regex 类似,但没有成功。我得到的最接近的是
(<.*?>).*SpecifiedString .*(<\/.*?>)
我知道为什么它没有按我的意愿工作,但我不知道我应该改变什么。
我尝试的第二个解决方案是
(?'html'<.*?>)|(SpecifiedString)
然后我试图用 foreach 在组和捕获上找到最内部的 html 标记,但我无法让它工作,所以我放弃了它。
编辑。
附加信息。如果指定文本不在任何 html 标记中,则正则表达式不应返回任何内容。我正在尝试找出指定的字符串是 razor 中的 html 还是 c# 代码。
我的问题。
是否有可能编写这样的正则表达式模式,如果可以,如何?
【问题讨论】:
-
“如果指定文本不在任何 html 标签中”?它总是在 标签内。
-
是的,但是
Regex.Match的输入只是剃须刀的内容,就像示例中一样。