2012-11-06 49 views
1

使用c#我試圖使用正則表達式來獲取冒號後出現的一段文本的值。我知道字段名稱,但有一個以下冒號處於可變位置。該值將在下一個空白處結束。正則表達式冒號後的字段名稱值

因此:

KnownFieldName:值

然後我想的值放入一個組中。

我發現了一些類似的問題,但沒有一個實際上指出我解決這個問題的方向。

這是一個更大的一段代碼的一部分,但基本上在這裏適合:

 foreach (var v in fieldsToParse) 
       { 
        var match = Regex.Match(line, v.pattern, RegexOptions.IgnorePatternWhitespace); 

        if (match.Success) 
         v.value = match.Groups[v.name].Value; 
       } 
+1

你的文字的其餘部分是什麼樣的? –

+0

其餘的可能包含更多的字段和答案 – KerSplosh

+0

這一切都只是字段和答案,由換行符分隔,還是有更多的? –

回答

0

你要找的應該是這樣的(?<knownfieldname>[a-zA-Z]+)(\s+):(\s+)(?<value>[a-zA-Z]+)knownfieldname(\s+):(\s+)(?<value>[a-zA-Z]+)

這假設正則表達式KnownFieldName和值都只是字母字符,當然。如果數字可以進入它,您可能還想要將0-9添加到範圍,或者如果有任何東西,但空白空間非常有效,那麼您可以使用我猜的\S通配符。

編輯爲包含可變數目的空格。另外,根據以下評論,您可能會考慮爲Derek Slager's awesome Regex testerthis simple Regex cheat sheet添加書籤。對於這種情況幫助很大。

+0

我需要用一個實際的字符串替換。這與正則表達式有什麼關係? – KerSplosh

+0

@KerSplosh 只是該正則表達式組的名稱。把它放在你發佈的內容中,它會是'match.Groups [「knownfieldname」]。Value;'。但是,如果你想只是把它作爲一個正則表達式,你可以把它放在longhand中:''knownfieldname:(? [a-zA-Z] +)'。正則表達式中的大部分內容都是從字面上解釋的。 – tmesser

+0

對不起,但我仍然沒有得到任何匹配。請注意冒號在已知字段後面是可變數量的空格。 – KerSplosh