正则表达式在特定字符之后匹配

本文关键字:之后 字符 正则表达式 | 更新日期: 2023-09-27 18:00:28

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

比赛将有"字段!元数据1"而我需要获取"元数据1">

我应该改变什么?

正则表达式在特定字符之后匹配

你需要的叫做后视/前视。正则表达式具有此功能,您可以指定当前匹配的字符串后面(或在本例中位于之前(的内容。

[0-9](?=[a-z])将匹配任何一个数字,后跟一个小写字母。
[0-9](?![a-z])将匹配任何一位数字 NOT 后跟小写字母。(这称为负面展望(
(?<=[a-z])[0-9]将匹配前面有小写字母的任何一位数字。
(?<![a-z])[0-9]将匹配任何不以小写字母开头的数字。(这称为负面回溯(

考虑到这一点,所需的 c# 表达式是:

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

编辑:如果您不想匹配"字段!"部分,这对您有好处。一个稍微不同的任务是如果你想匹配它,但你还需要第二部分的值。在这种情况下,我建议使用命名组,这将捕获整个内容,但您可以从 Groups 集合中获取部分。在这种情况下,正则表达式将是:Fields!(?'fieldName''w+) ,c# 用法为

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;
   //...
}
不知道

C# 语法,对于正则表达式,请尝试:

(?<=Fields!)'w*

编辑添加简短说明:

只有当bar遵循foo(foo不会在比赛结果中((?<=..)是积极的向后看,零宽度断言时,(?<=foo)bar匹配bar。 谷歌它的细节。

也许你可以试试这个...

var match = Regex.Match(item, @"!(''w+("(;

然后得到匹配。组[1]。价值