2010-11-16 5 views
0

J'ai un problème d'expression régulière où je dois remplacer un mot ou l'abréviation d'un mot dans une chaîne. Supposons que nous avons la chaîne "GARGANO/MART/RUBI250/(FLAH)". Le mot de cette chaîne est RUBIN mais a été abrégé en RUBI250.Aide avec Regex.Replace ("GARGANO/MART/RUBI250/(FLAH)", @ " bRUB (I (N?)?)? ([0-9] *) b", "TOKE")

Cependant, quand je l'expression

Regex.Replace("GARGANO/MART/RUBI250/(FLAH)", @"\bRUB(I(N?)?)?([0-9]*)\b", "TOKE") 

Je reçois ce "GARGANO/MART/TOKE/(FLAH/GENN)"

Mon résultat souhaité est « GARGANO/MART/TOKE250/(FLAH/GENN) "

Il semble, il pense que le nombre fait partie du travail et remplace le nombre. Quand je change l'expression régulière à

@ "\ Brub (I (N?)?)? \ B",

il ne renvoie pas un match parce que je suppose que le nombre de tout Fout. S'il vous plaît aider.

Répondre

0

Essayez de remplacer la pièce ([0-9] ) par sa version de référence (? = [0-9]). Il ne devrait pas remplacer la partie numérique de votre match quand elle existe.

1

Il devrait être:

Regex.Replace("GARGANO/MART/RUBI250/(FLAH)", @"\bRUB(I(N?)?)?(?=[0-9]*\b)", "TOKE") 

(?=[0-9]*\b) est un regard en avant, ce qui signifie qu'il doit être là après le match, mais ce n'est pas partie du match.

+0

Vous avez raison. C'est ce que je reçois pour ne pas copier/coller ce que j'ai testé ... – climbage