2014-02-07 32 views
0

我想匹配字符串「F1」到「F12」。我只需要這個號碼。我出的培訓 - 我第一次嘗試:簡單的正則表達式不起作用

比賽 - 但回報「F1」 - 但我希望得到「1」?

我做錯了什麼?

+1

你是什麼意思的「回報」?你什麼都不打電話!請顯示一個簡短的*完整的*程序來證明問題。 (我懷疑問題是你需要爲你需要的部分定義一個捕獲組,然後提取該組的值。) –

回答

1

即使您正在使用非捕獲組爲「F」,爲您Regex整個比賽將回到它匹配整個字符串。組用於在您的正則表達式中概述要提取其值的子表達式。如果要指定子表達式而不將其存儲在組中,則使用非捕獲組。它們允許您將量詞應用於您的子表達式,但不允許在針對字符串運行正則表達式後提取其結果值。它們通常用於提高性能,因爲捕獲組會增加額外開銷。

如果要得到公正的數量,你需要把數部分的捕獲組,並期待在產生MatchGroups屬性(假設您呼叫的r.Match功能)。

更新Regex是:

var r = new Regex(@"^(?:[F])([\d]{1,2})$"); 

由於我們的號碼是第一套具有捕獲組相關聯的括號內,這將是組1。你也可以命名您的組,以避免混亂或如果正則表達式在以後更新,可能會出現錯誤。

或者,您可以按照M42的建議使用後視。

+0

Thx很多 - 工作:) – damike

2

也許你想使用回顧後:

var r = new Regex(@"^(?<=F)\d\d?$"); 
+0

對不起 - 無法得到它的工作:-(調用r.Match(「F1」))應該工作嗎?沒有組[X] .Value包含結果 – damike