c#正则表达式如何在字符串中查找两条记录

时间:2014-07-08 11:00:33

标签: c# regex asp.net-mvc

好的我正在构建我的电子邮件模板引擎并试图在我的文本中分解{{{}}}之间的部分文字

 var matches = Regex.Matches("sdfsdfsdf{{{GetServices:Pilotage}}}sdfsdfsdf dfsdf{{{GetServices:Berth Fee}}}sdfdsf{{sss", "{{{(.*)}}}");

我如何解析这个字符串,所以我得到这个结果数组。我一直在尝试不同的东西,但无济于事。我怎么能实现这个

1)GetServices:Pilotage

2)GetServices:Berth Fee

4 个答案:

答案 0 :(得分:3)

如果你强迫它不贪婪,你的尝试(尽管可能不是最佳的)应该有效:

{{{(.*?)}}}

只需在?之后添加*

答案 1 :(得分:1)

使用Grouping检索匹配项。

var input = "sdfsdfsdf{{{GetServices:Pilotage}}}sdfsdfsdf dfsdf{{{GetServices:Berth Fee}}}sdfdsf{{sss\", \"{{{(.*)}}}";
var matches = Regex.Matches(input, "\\{\\{\\{(GetServices:[^{]*)\\}\\}\\}");
var result = new List<string>();
foreach (Match match in matches)
{
    if (match.Groups.Count == 2)
    {
        result.Add(match.Groups[1].ToString());
    }
}

答案 2 :(得分:0)

你可以试试这个正则表达式:

(\{{3}\w*\:[\w\ ]*\}{3})+

修改

要获得该值,请参阅答案: Find each RegEx match in string

答案 3 :(得分:0)

模式为"\{{3}(.+?)\}{3}""\{{3}(.*?)\}{3}"。如果中间的字符串是可选的或必需的,则取决于您的需要。