2009-07-16 9 views
0

Avec l'expression rationnelle suivante, il ne correspond pas à -lp [nombre]Regex numéro match

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

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

exemple chemin qui est envoyé à ma fonction:

/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; 
} 

Je dois saisir le nombre après -lp. Il semble être qu'il n'aime pas le caractère supplémentaire ou n'aime pas parce que p -l fonctionne très bien si je change le regex à une seule lettre après - tels que:

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

par exemple chaîne de : /domain/Some-Landing-Page-Meta-Title-l1.l

+0

Cela fonctionne pour moi - êtes-vous sûr qu'il n'y a pas d'autre chose qui affecte le résultat? Y a-t-il plus de code que vous pouvez poster? –

+0

Vous devrez nous montrer plus de code. Cela fonctionne dans mes tests rapides. –

Répondre

0

Vous avez pas dit où l'erreur se produit, mais il semble que vous pourriez avoir besoin d'utiliser "value.Length - 4", au lieu de "value.Length - 3".

Je suis sur mon netbook, donc je ne peux pas le tester, mais il semble que vous puissiez inclure le "." lorsque vous prenez la sous-chaîne. Si c'est le cas, Int32.TryParse échouerait. Est-ce là le problème?

Cela rendrait également compte, je pense, du test "l1" passant alors que le test "lp1" échoue.

1

Peut-être vous avez juste besoin d'ajouter des parenthèses de capture, de sorte que le nombre est accessible après la correspondance?

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

sans options, a fonctionné pour moi avec les données de test suivant:

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

A quoi sert la classe de caractères ([])? Est-ce que "[\ d] {1,}" n'est pas identique à "\ d +"? –

+0

Oops .. ouais c'est exactement la même chose: D c'est ce que j'ai pour courir! – Jared

Questions connexes