正则表达式匹配特定字符后
var str = "=IIF(IsNothing(Fields!Metadata1.Value),"N/A",Fields!Metadata1.Value)"; var regexp = new Regex(@"Fields!(w+)"); var matches = regexp.Matches(str);
匹配将有“Fields!Metadata1”,而我需要获得“Metadata1”
我该怎么改变?
不知道c#语法,对于正则表达式,请尝试:
(?<=Fields!)w*
编辑补充简短说明:
(?<=foo)bar
只有当bar
跟随foo
时才匹配bar
(foo不会出现在匹配结果中) (?<=..)
是正面看后面,零宽度断言。 google了解详情。
你需要什么叫做lookbehind / lookahead 。 正则表达式具有此function ,您可以指定当前匹配的字符串后面(或在此情况下)。
[0-9](?=[az])
将匹配任何一个数字后跟一个小写字母。
[0-9](?![az])
将匹配任何一个数字NOT后跟一个小写字母。 (这称为负向前瞻)
(?<=[az])[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; //... }
也许你可以尝试这个……
var match = Regex.Match(item,@“!( w +)”);
然后得到match.Groups [1] .Value
上述就是C#学习教程:正则表达式匹配特定字符后分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1027164.html