如何在C#中为正则表达式挑战的正则表达式匹配模式?

如何在C#中为正则表达式挑战的正则表达式匹配模式?,c#,regex,C#,Regex,以下面的字符串为例,我应该使用什么模式来提取我需要的所有字符串实例?因此,采取以下措施: string Text = @"Dear {Customer.Name}, Lorem ipsum dolor sit amet, {Customer.FirstName}"; 以及提取{Customer.Name}和{Customer.FirstName}?作为奖励,{和}可以在提取过程中删除吗 我正在使用LinqPad,我得到了新的正则表达式({[A-Za-z0-9.]+}

以下面的字符串为例,我应该使用什么模式来提取我需要的所有字符串实例?因此,采取以下措施:

string Text = @"Dear {Customer.Name},
              Lorem ipsum dolor sit amet, {Customer.FirstName}";
以及提取
{Customer.Name}
{Customer.FirstName}
?作为奖励,
{
}
可以在提取过程中删除吗

我正在使用LinqPad,我得到了
新的正则表达式({[A-Za-z0-9.]+}),RegexOptions.Multiline.Match(Text)
到目前为止,但它只匹配
{Customer.Name}
的第一个子字符串

我在正则表达式方面非常有挑战性,因此我非常感谢您的详细帮助


提前谢谢

你的正则表达式看起来不错。唯一的问题是,您需要调用
Matches
而不是
Match
来获取输入字符串中的所有匹配项

您可以将想要的零件放入子组中,然后在进一步处理中仅使用子组:

var matches = Regex.Matches(Text, "{([A-Za-z0-9.]+)}", RegexOptions.Multiline);
foreach(Match match in matches)
{
    var variable = match.Groups[1].Value;
}

解决方案向前看,向后看,无需使用组

(?<={)[^}]*(?=})

(?使用static
Regex.Matches
方法更好,因为它会缓存正则表达式,而不是每次都创建一个新的正则表达式。(您只需传递正则表达式对象,但这很烦人。)哈哈,
匹配
部分就是其中之一,你只是给自己一记耳光,然后想你怎么可能会错过呢?我想这只是说明我对正则表达式的教育程度有多低……无论如何,谢谢你的例子,我在LinqPad中试过了,它完全满足了我的需要。再次感谢!是的,我突然想到我忘记了在我发表评论后接受它。:p从代码维护的角度来看,确实很有趣,但很糟糕。+1@Gursel,我不知道维护有多过分或糟糕,但我喜欢它。我现在要使用我的模式,只是因为我理解它,但当我学会阅读你的模式时,我可能会使用它。不过,谢谢你的示例!但要小心,这些结构是性能杀手,如果您的文本大小约为mb,我不建议使用此解决方案。我会假设它更多地位于KB范围内。请考虑一个包含两个页面的文档。