簡體   English   中英

正則表達式匹配特定字符后

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM