[英]Regex to match after specific characters
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”
我該怎么改變?
你需要什么叫做lookbehind / lookahead 。 正則表達式具有此功能 ,您可以指定當前匹配的字符串后面(或在此情況下)。
[0-9](?=[az])
將匹配任何一個數字后跟一個小寫字母。
[0-9](?![az])
將匹配任何一個數字NOT后跟一個小寫字母。 (這稱為負向前瞻)
(?<=[az])[0-9]
將匹配以小寫字母開頭的任何一位數字。
(?<![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;
//...
}
不知道c#語法,對於正則表達式,請嘗試:
(?<=Fields!)\w*
編輯添加簡短說明:
(?<=foo)bar
只有當bar
跟隨foo
時才匹配bar
(foo不會出現在匹配結果中) (?<=..)
是正向后看,零寬度斷言。 google了解詳情。
也許你可以嘗試這個......
var match = Regex.Match(item,@“!(\\ w +)”);
然后得到match.Groups [1] .Value
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.