2010-02-05 8 views
1
Regex.Replace("some big text", "^.+(big).+$", "$1"); // "big" 
Regex.Replace("some small text", "^.+(big).+$", "$1"); // "some small text", but i need here empty string 

Je dois sélectionner une valeur dans la chaîne. C'est bon, quand la chaîne correspond au motif. Mais lorsque la chaîne ne correspond pas, il y a une chaîne d'origine dans le résultat de remplacement. J'ai besoin d'une chaîne vide, quand la chaîne ne correspond pas au modèle (seulement en utilisant le remplacement).Résultat de remplacement vide, lorsque regex ne correspond pas

Répondre

0

Utilisez la méthode Regex.Match. De cette façon, vous pouvez d'abord vérifier si la valeur correspond. Si oui, vous pouvez faire le remplacement. Sinon, vous venez de renvoyer un String.Empty.

Plus sur Regex.Match se trouvent à: http://msdn.microsoft.com/en-us/library/twcw2f1c.aspx

+0

Je le sais, mais je ne peux pas utiliser la méthode Regex.Match. Je ne peux utiliser que remplacer. J'utilise Yahoo Pipes, et il n'y a que la fonction de réplication pour sélectionner des valeurs. Je ne peux pas ajouter de méthode de correspondance avant. – chardex

1

Bien que la bonne façon serait d'utiliser une fonction match, vous pourriez simuler en lui permettant de correspondre à des chaînes arbitraires en cas d'échec original match:

Regex.Replace("some big text", "^.+(big).+$|^(.*)$", "$1$2"); // "big" 
Regex.Replace("some small text", "^.+(big).+$|^(.*)$", "$1$2"); 

Il ne tentera pas de faire correspondre la regex fourre-tout sauf si la première partie échoue si elle est écrite dans cet ordre.

Questions connexes