2009-12-06 8 views
1

Je souhaite remplacer tous les doubles jetons dans la chaîne par la double valeur ajoutée avec la lettre "c". Y a-t-il un moyen facile de le faire? Je pensais que l'expression régulière est la voie à suivreUtilisation de RegEx pour trouver et remplacer les doubles

par exemple, je veux changer les éléments suivants

treand60(12.3)/1010 + 1 >1010 

avec

treand60(12.3c)/1010c + 1c >123c 

suggestions

+0

Que considérez-vous comme un jeton pour vos objectifs? – Amber

+0

tout ce qui est séparé par un opérateur arithmétique ou logique ou() – mustafabar

Répondre

2

Fondamentalement, vous voulez chercher toutes les séquences de chiffres se terminant éventuellement par un point décimal et une autre séquence de chiffres, puis ajoutez un 'c'. Voici un exemple, en supposant que vous utilisez Perl (votre question ne dit pas):

$_ = 'treand60(12.3)/1010 + 1 >1010'; 
s/\b\d+(?:\.\d+)?/$&c/g; 
print; # output is "treand60(12.3c)/1010c + 1c >1010c" 

\d+ est 1 ou plusieurs chiffres, puis \.\d+ est 1 ou plusieurs chiffres après la virgule. Le (?: ...) est un non-capturing group. Le dernier ? signifie "correspondre à zéro ou à l'un de ceux-ci" (c'est-à-dire facultatif). Et le \b signifie correspondre seulement sur les frontières de mot (ceci empêche quelque chose comme "Hello123" de correspondre parce que le nombre vient directement après un caractère de mot).

Voici le C# équivalent:

using System.Text.RegularExpressions; 
// ... 

string input = "treand60(12.3)/1010 + 1 >1010"; 
Regex regex = new Regex(@"\b\d+(?:\.\d+)?"); 
string output = regex.Replace(input, (m) => m.Value + 'c'); 
Console.WriteLine(output); // prints "treand60(12.3c)/1010c + 1c >1010c" 

L'expression lambda dans l'appel Regex.Replace est un MatchEvaluator qui obtient simplement le texte du match et ajoute un 'c'.

+0

Désolé, je n'ai pas mentionné que je veux le faire avec C# – mustafabar

+0

Vérifier ma mise à jour. – bobbymcr

+0

qui fonctionne parfaitement, merci – mustafabar

Questions connexes