2009-07-16 65 views
0

用下面的正則表達式,它不匹配-lp [數字]發送到我的功能正則表達式匹配問題

public static Regex lPageID = new Regex(@"\-lp\d+\.", RegexOptions.Compiled | RegexOptions.IgnoreCase); 

public static int GetPageIDFromPath(string path) 
{ 
    return GetIDFromPath(lPageID, path); 
} 

例如路徑:

/域/有些着陸頁-元-Title-lp1.lp

private static int GetIDFromPath(Regex regex, string path) 
{ 
    Match match = regex.Match(path); 
    if (match.Success) 
    { 
     string value = match.Value; 
     value = value.Substring(2, value.Length - 3); 
     int id; 
     if (Int32.TryParse(value, out id)) 
      return id; 
    } 

    return 0; 
} 

我需要抓取-lp後面的數字。這似乎是它不喜歡多餘的字符或沒有像寶潔這樣的,因爲如果我改變了正則表達式的單個字母后-l正常工作 - 如:

public static Regex lPageID = new Regex(@"\-l\d+\.", RegexOptions.Compiled | RegexOptions.IgnoreCase); 

與示例串:/domain/Some-Landing-Page-Meta-Title-l1.l

+0

它適用於我 - 你確定沒有其他影響結果的東西嗎?有更多的代碼可以發佈嗎? – 2009-07-16 20:16:41

+0

您需要向我們展示更多代碼。這在我的快速測試中起作用。 – 2009-07-16 20:18:32

回答

0

這裏發生了誤差,你還沒有說,但它看起來像你可能需要使用「value.Length - 4」,而不是「value.Length - 3」。

我在我的上網本,所以不能測試它,但它看起來像你可能會包括「。」當你拿到子串。如果是這樣,Int32.TryParse將失敗。問題在哪裏?

對於在「lp1」測試失敗時通過的「l1」測試,我認爲這也是可以解釋的。

1

也許你只需要添加捕獲圓括號,以便在匹配後可以訪問該數字?

"\-lp(\d+)\." 
0
(?<=-lp)(\d+) 

不帶選項,工作對我來說與下面的測試數據:

Some-Page-Meta-Title-lp1.lp 
Some-Page-Meta-Title-lp1093.lp 
Some-Page-Meta-Title-lp122.lp 
Some-Page-Meta-Title-lp1222223.lp