2
votes

Remplacer la chaîne uniquement lorsque 100% correspondent

Juste errant, comment pourrais-je remplacer une chaîne uniquement lorsqu'elle correspond à 100% dans c # .net? Par exemple, j'ai la chaîne suivante:

ABC-2 ABC-1.1 ABC-1.1~1

J'utilise le script suivant pour remplacez la chaîne:

ABC-2 ABC-2.1 ABC-2.1~1

Pour le moment, le résultat est comme suit:

a.Replace("ABC-1", "ABC-2");

Au lieu de cela, je cherche pour la sortie est comme:

StringBuilder a = new(StringBuilder);     
a = "ABC-1 ABC-1.1 ABC-1.1~1"

Est-ce que quelqu'un sait comment puis-je le faire?


1 commentaires

Qu'est-ce qui rend quelque chose «complet»? Voulez-vous dire "un mot doit être entouré d'espaces (ou être au début ou à la fin de la chaîne) - et je veux faire correspondre le mot entier"? Si tel est le cas, utilisez string.Split . Parcourez le tableau et remplacez les entrées du tableau là où elles correspondent exactement ( == ). Ensuite, string.Rejoignez-les ensemble.


4 Réponses :


5
votes

Cela peut aider:

"ABC-2 ABC-1.1 ABC-1.1~1"

Résultat:

var a = "ABC-1 ABC-1.1 ABC-1.1~1";
var result = String.Join(" ", a.Split(' ').Select(x=>x=="ABC-1"? "ABC-2":x));


0 commentaires

3
votes

Le " doublon " étant lié à serait une bonne solution si votre entrée ne contenait pas de ponctuation signalant la fin d'un mot. Donc le Regex dans ce fil ne fonctionne pas tel quel.

Vous devriez pouvoir utiliser un lookahead négatif cependant.

var a = "ABC-1 ABC-1.1 ABC-1.1~1";

a = Regex.Replace(a, @"\bABC-1\b(?!\S)", "ABC-2");

Console.WriteLine(a);  // ABC-2 ABC-1.1 ABC-1.1~1

Il affirme essentiellement que le caractère après le terme de recherche n'est pas un caractère non blanc (mais correspond également si c'est la fin de la chaîne).


0 commentaires

0
votes

Pour faire correspondre le mot exact, utilisez regex @"(^|\s)ABC-1.1(\s|$)";

string a = "ABC-1 ABC-1.1 ABC-1.1~1";
    string pattern  = @"(^|\s)ABC-1.1(\s|$)";
    string replace =  Regex.Replace(a, pattern , " test ");

    Console.WriteLine(replace);

output Test ABC-1 ABC-1.1 ~ 1


0 commentaires

1
votes

Si vous souhaitez remplacer uniquement la première occurrence, cette méthode peut vous aider:

public static string ReplaceFirst(this string original, string oldValue, string newValue)
{
    var index = original.IndexOf(oldValue);
    if (index >= 0) {
        var prev = original.Substring(0, index);
        var after = original.Substring(index + oldValue.Length);
        return prev + newValue + after;
    }
    return original;
}


0 commentaires