正则表达式匹配问题

时间:2009-07-16 20:13:16

标签: asp.net regex

使用以下正则表达式,它不匹配-lp [number]

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

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

发送到我的函数的示例路径:

/domain/Some-Landing-Page-Meta-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之后获取数字。它似乎是它不喜欢额外的字符或不喜欢p因为-l工作正常如果我将正则表达式更改为单个字母后 - 例如:

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

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

3 个答案:

答案 0 :(得分:1)

也许您只需要添加捕获括号,以便在匹配后可以访问该号码?

"\-lp(\d+)\."

答案 1 :(得分: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

答案 2 :(得分:0)

你还没有说出错误发生在哪里,但看起来你可能需要使用“value.Length - 4”,而不是“value.Length - 3”。

我在上网本上,所以无法测试,但看起来你可能会包含“。”当你采用子串。如果是这样,Int32.TryParse将失败。这就是问题所在吗?

我认为,当“lp1”测试失败时,这也会导致“l1”测试通过。