c# - zeichen - Möglichkeit, String zu haben. Ersetzen Sie nur "ganze Wörter"




string replace c# (4)

Ich brauche einen Weg, dies zu haben:

"test, and test but not testing.  But yes to test".Replace("test", "text")

gib das zurück:

"text, and text but not testing.  But yes to text"

Grundsätzlich möchte ich ganze Wörter ersetzen, aber keine Teilübereinstimmungen.

HINWEIS: Ich werde dafür VB verwenden müssen (SSRS 2008-Code), aber C # ist meine normale Sprache, so dass die Antworten in beiden gut sind.

https://code.i-harness.com


Eine Regex ist der einfachste Ansatz:

string input = "test, and test but not testing.  But yes to test";
string pattern = @"\btest\b";
string replace = "text";
string result = Regex.Replace(input, pattern, replace);
Console.WriteLine(result);

Der wichtige Teil des Musters ist das \b Metazeichen, das auf Wortgrenzen passt. Wenn Sie die Groß- / Kleinschreibung RegexOptions.IgnoreCase verwenden Sie RegexOptions.IgnoreCase :

Regex.Replace(input, pattern, replace, RegexOptions.IgnoreCase);

Ich habe eine Funktion erstellt (siehe Blogpost hier ), die Regex-Ausdruck , vorgeschlagen von

/// <summary>
/// Uses regex '\b' as suggested in https://.com/questions/6143642/way-to-have-string-replace-only-hit-whole-words
/// </summary>
/// <param name="original"></param>
/// <param name="wordToFind"></param>
/// <param name="replacement"></param>
/// <param name="regexOptions"></param>
/// <returns></returns>
static public string ReplaceWholeWord(this string original, string wordToFind, string replacement, RegexOptions regexOptions = RegexOptions.None)
{
    string pattern = String.Format(@"\b{0}\b", wordToFind);
    string ret=Regex.Replace(original, pattern, replacement, regexOptions);
    return ret;
}

Sie könnten den string.replace verwenden

string input = "test, and test but not testing.  But yes to test";
string result2 = input.Replace("test", "text");
Console.WriteLine(input);
Console.WriteLine(result2);
Console.ReadLine();

Wenn Sie definieren möchten, welche Zeichen ein Wort bilden, zB "_" und "@"

Du könntest meine (vb.net) Funktion benutzen:

 Function Replace_Whole_Word(Input As String, Find As String, Replace As String)
      Dim Word_Chars As String = "[email protected]"
      Dim Word_Index As Integer = 0
      Do Until False
         Word_Index = Input.IndexOf(Find, Word_Index)
         If Word_Index < 0 Then Exit Do
         If Word_Index = 0 OrElse Word_Chars.Contains(Input(Word_Index - 1)) = False Then
            If Word_Index + Len(Find) = Input.Length OrElse Word_Chars.Contains(Input(Word_Index + Len(Find))) = False Then
               Input = Mid(Input, 1, Word_Index) & Replace & Mid(Input, Word_Index + Len(Find) + 1)
            End If
         End If
         Word_Index = Word_Index + 1
      Loop
      Return Input
   End Function

Prüfung

Replace_Whole_Word("We need to replace words tonight. Not to_day and not too well to", "to", "xxx")

Ergebnis

"We need xxx replace words tonight. Not to_day and not too well xxx"






string