2009-01-29 7 views
0

J'ai actuellement le code ci-dessous, pour remplacer un caractère dans une chaîne, mais j'ai maintenant besoin de remplacer les caractères dans le premier X (dans ce cas 3) caractères et laisser le reste de la chaîne. Dans mon exemple ci-dessous, j'ai 51115 mais je dois remplacer tout 5 dans les 3 premiers caractères et je finirais avec 61115.C# Chaîne de remplacement utilisant Regex

Mon code actuel:

value = 51115; 
oldString = 5; 
newString = 6; 

result = Regex.Replace(value.ToString(), oldString, newString, RegexOptions.IgnoreCase); 
résultat

est maintenant 61116. Que voulez-vous suggérer que je fais pour interroger seulement les premiers caractères x?

Merci

Répondre

2

Pas particulièrement de fantaisie, mais seulement donner regex les données qu'il devrait remplacer; N'envoyez que les caractères qui devraient potentiellement être remplacés.

result = Regex.Replace(value.ToString().Substring(0, x), oldString, newString, RegexOptions.IgnoreCase); 
1

Si vous ne remplacez qu'un seul caractère, vous pouvez simplement écrire le code pour le remplacer vous-même. Ce serait plus rapide que de jouer avec une sous-chaîne, puis un remplacement RegEx (qui est un gaspillage de toute façon si vous faites un remplacement à un seul caractère).

StringBuilder sb = new StringBuilder(oldString.Length); 
foreach(char c in oldString) { 
    if(c == replaceFrom) { c = replaceTo; } 
    sb.Append(c); 
} 
return sb.ToString(); 
0

I love RegEx, mais dans ce cas je voudrais juste faire une .Replacer

string value; 
    string oldString; 
    string newString; 
    value = "51115"; 
    int iLenToLook; 
    iLenToLook = 3; 
    oldString = "5"; 
    newString = "6"; 
    string result; 
result = value.Length > iLenToLook ? value.Substring(iLenToLook, value.Length - iLenToLook) :""; 

result = value.Substring(0, value.Length >= iLenToLook ? iLenToLook : value.Length).Replace(oldString, newString) + result; 

EDIT je l'ai changé pour obtenir la partie non remplacé d'abord, dans le cas où il y avait des chaînes de remplacement de longueurs différentes de l'original.

1

Je pense que l'option caractère par caractère mentionné ici est sans doute plus clair, mais si vous voulez vraiment un regex:

string result = ""; 
int value = 55555; 
string oldString = "5"; 
string newString = "6"; 

var match = new Regex(@"(\d{1,3})(\d+)?").Match(value.ToString()); 
if (match.Groups.Count > 1) 
    result = match.Groups[1].Value.Replace(oldString, newString) + (match.Groups.Count > 2 ? match.Groups[2].Value : ""); 
0

Chaque fois que quelqu'un dans le monde .NET a une question sur regex, je vous recommande Expresso (link). C'est un excellent outil pour travailler dans le monde confus et épineux des expressions régulières.

Questions connexes