C# 要在特定字符后匹配的正则表达式

C# 要在特定字符后匹配的正则表达式,c#,regex,C#,Regex,匹配项将具有“字段!元数据1” 而我需要得到“元数据1” 我该换什么 不知道c#语法,对于正则表达式,请尝试: var str = "=IIF(IsNothing(Fields!Metadata1.Value),"N/A",Fields!Metadata1.Value)"; var regexp = new Regex(@"Fields!(\w+)"); var matches = regexp.Matches(str); (?也许你可以试试这个 var match=Regex.match(项

匹配项将具有“字段!元数据1” 而我需要得到“元数据1”

我该换什么

不知道c#语法,对于正则表达式,请尝试:

var str = "=IIF(IsNothing(Fields!Metadata1.Value),"N/A",Fields!Metadata1.Value)";
var regexp = new Regex(@"Fields!(\w+)");
var matches = regexp.Matches(str);

(?也许你可以试试这个

var match=Regex.match(项@“!(\w+))


然后获取匹配的.Groups[1].Value

您需要的称为lookbehind/lookahead。Regex有,您可以指定当前匹配字符串后面(或前面)的内容

[0-9](?=[a-z])
将匹配任何一个数字,后跟一个小写字母。
[0-9](?![a-z])
将匹配任何一个不后跟小写字母的数字。(这称为负前瞻)
(?
考虑到这一点,您需要的c#表达式是:

(?<=Fields!)\w*

很好用。谢谢!我是新来的regexp。你能解释一下这一个在做什么吗?C#命名组用尖括号表示,而不是引号…但是命名组在这里并不是真的需要,而且原始的regex已经有了一个捕获组。至于命名组与捕获组:我发现使用名称总是更好的非常感谢。这是一个非常详细的答案。很遗憾,我不能接受第一个正确的答案和最详细的答案。再次感谢,今天我学习了
“…”
,而不是
。但是,在这样一个简单的正则表达式中,只有一个组。。。
var str = "=IIF(IsNothing(Fields!Metadata1.Value),"N/A",Fields!Metadata1.Value)";
var regexp = new Regex(@"(?<=Fields!)(\w+)");
var matches = regexp.Matches(str);
var str = "=IIF(IsNothing(Fields!Metadata1.Value),"N/A",Fields!Metadata1.Value)";
var regexp = new Regex(@"Fields!(?'fieldName'\w+)");
var matches = regexp.Matches(str);
foreach (Match m in matches) 
{
   var fieldName = m.Groups["fieldName"].Value;
   //...
}