2009-07-16 66 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