如何在C#中使用Regex从cshtml页面中提取@ViewData变量值?

时间:2016-08-25 16:29:13

标签: c# asp.net regex razor

我有以下cshtml页面:

<div class="container ptb-60">
<div class="row featurette">
    <div class="col-md-7">
        <h2 class="featurette-heading">@ViewData["PageTitle"]</h2>
        <p class="lead">@ViewData["Excerpt"]</p>
        <p>
            <a class="btn btn-primary btn-lg" href="@ViewData["Template.HeaderButton.Url"]" role="button">@ViewData["Template.HeaderButton.Text"]</a>
        </p>
    </div>
    <div class="col-md-5">
        <img class="featurette-image img-responsive center-block" src="@ViewData["Template.HeaderButton.Image"]" alt="@ViewData["Template.HeaderButton.AltText"]">
    </div>
</div>

我希望提取@ViewData的所有变量值 - 所以对于这个例子,我想得到一个包含以下内容的匹配列表:

"PageTitle"
"Excerpt"
"Template.HeaderButton.Url"
"Template.HeaderButton.Text"
"Template.HeaderButton.Image"
"Template.HeaderButton.AltText"

到目前为止我的最大努力是使用这个:Regex regex = new Regex(@"""[^""\\]*(?:\\.[^""\\]*)*""");来提取所有字符串值(在语音标记之间),但这与某些值混淆,我需要搜索@ViewData["GET_THIS_BIT_AS_A_MATCH"]

试过这个:@"""[^@ViewData\[""\\]*(?:\\.[^""\]\\]*)*"""

但没有运气!我有点像RegeX菜鸟!有人可以帮忙吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

如果您只想要@ViewData中的值,我认为这种模式可以满足您的需求:@ViewData\[\"(.*?)\"\]。该值将是捕获组。