Я пытаюсь создать функцию, заменяющую только целые слова, например:заменить только целые слова C#
предложение: «#testing является #test», если я использую Replace («# тест», " #cool "), я буду иметь„#cooling если #cool“, но я хотел бы иметь„#testing является #cool“
Я искал и каждый ответ был найден:
string pattern = @"\b"+previousText+"\b";
string myText = Regex.Replace(input, pattern, newText, RegexOptions.IgnoreCase);
Однако это решение не работает, если мой предыдущий текст (тот, который я хотел бы заменить) содержит «#».
Как мой предыдущий текст, так и мой новый текст могут начинаться с символа «#».
Какое решение для этого?
EDIT: Благодаря Legends регулярное выражение теперь работает, если слово сопровождается пробелом, но терпит неудачу, если искомое слово находится рядом с запятой:
string input = "#test, #test";
string patternTest = @"#test";
string newTextTest = "#cool";
string result = Regex.Replace(input, @"(?:(?<=^|\s)(?=\S|$)|(?<=^|\S)(?=\s|$))" + patternTest + @"(?:(?<=^|\s)(?=\S|$)|(?<=^|\S)(?=\s|$))", newTextTest, RegexOptions.IgnoreCase);
это возвращает: «#test, #cool» вместо «#cool, #cool»
Вы должны использовать Regex для этого –
, похоже, работает со словом границы только после хеш-тега '@" # test \ b "' или '@" # \ btest \ b "' – Slai