2010-05-14 4 views
0

J'ai une entrée comme ceci test1.test2.part01 que je veux enlever à test1.test2. La seule chose que je sais est que cela va se terminer par partxx et probablement un point avant le partxx. Cependant, il ne sera pas toujours à part. Un autre exemple d'entrée pourrait être testas1.tlp2.asd3.part10 qui, bien sûr devrait être dépouillé à testas1.tlp2.asd3.C# regex. Correspondance optionnelle après chaîne

J'ai fait tout ça, pas de problème. Le problème est le point à la fin avant partxx. Mon regex pour le moment est:

(.*)\.?part\d{1,2} 

Mais il inclura le point dans le groupe. Je ne veux pas que le point soit dans le groupe. Le ci-dessous fonctionne comme je le veux, étant donné que le point existe, mais il ne sera pas toujours là.

(.*)\.part\d{1,2} 

Comment puis-je exclure le point optionnel du groupe?

Répondre

3

Escape the dot

(.*)\.?part\d{1,2} 

La façon dont vous l'avez, le point est interprété comme signifiant "tout caractère" plutôt que d'un point littéral.

Alternativement,

s/\.part\d\d?$//; 
+0

Merci, ne peut pas croire que j'ai raté. Même si je l'échappe ce sera dans le groupe –

+2

Je soupçonne que cela inclura toujours le point dans le groupe puisque le quantificateur à l'intérieur du groupe est gourmand. '(. *?) \.? part \ d {1,2}' pourrait mieux fonctionner. –

+0

@Tim Cela semblait faire l'affaire! :) Merci –

Questions connexes