gpt4 book ai didi

c# - 使用 string.Replace 来匹配整个单词

转载 作者:行者123 更新时间:2023-11-30 20:07:22 25 4
gpt4 key购买 nike

我正在使用 NET 2.0 和 WinForms。

目前,我需要一个代码来将给定文本中的字符串替换为另一个字符串,但在文本中它应该只查找整个单词。我的意思是:

string name = @"COUNTER = $40
CLOCK_COUNTER = $60";
name = name.Replace("COUNTER", "COUNT");

它应该只用 COUNT 替换 COUNTER 的第一个实例,因为那是完整的单词。但是,string.Replace 似乎没有考虑整个单词。

请不要推荐正则表达式。我已经尝试过了,它对我的​​需求来说太慢了。我需要一些非常快速和高效的东西。我怎样才能做到这一点?

最佳答案

string input = @"COUNTER = $40
CLOCK_COUNTER = $60";

string name = Regex.Replace(input, @"\bCOUNTER\b", "COUNT");

\b 标记单词边界。


Regex 的唯一替代方法是开发您自己的算法!搜索“COUNTER”并测试前后字符是否不是单词字符。


编辑:

这是我作为扩展方法的解决方案:

public static class ReplaceWordNoRegex
{
private static bool IsWordChar(char c)
{
return Char.IsLetterOrDigit(c) || c == '_';
}

public static string ReplaceFullWords(this string s, string oldWord, string newWord)
{
if (s == null) {
return null;
}
int startIndex = 0;
while (true) {
int position = s.IndexOf(oldWord, startIndex);
if (position == -1) {
return s;
}
int indexAfter = position + oldWord.Length;
if ((position == 0 || !IsWordChar(s[position - 1])) && (indexAfter == s.Length || !IsWordChar(s[indexAfter]))) {
s = s.Substring(0, position) + newWord + s.Substring(indexAfter);
startIndex = position + newWord.Length;
} else {
startIndex = position + oldWord.Length;
}
}
}
}

编辑#2:这是一个使用 StringBuilder 的解决方案。

public static string ReplaceFullWords(this string s, string oldWord, string newWord)
{
if (s == null) {
return null;
}
int startIndex = 0; // Where we start to search in s.
int copyPos = 0; // Where we start to copy from s to sb.
var sb = new StringBuilder();
while (true) {
int position = s.IndexOf(oldWord, startIndex);
if (position == -1) {
if (copyPos == 0) {
return s;
}
if (s.Length > copyPos) { // Copy last chunk.
sb.Append(s.Substring(copyPos, s.Length - copyPos));
}
return sb.ToString();
}
int indexAfter = position + oldWord.Length;
if ((position == 0 || !IsWordChar(s[position - 1])) && (indexAfter == s.Length || !IsWordChar(s[indexAfter]))) {
sb.Append(s.Substring(copyPos, position - copyPos)).Append(newWord);
copyPos = position + oldWord.Length;
}
startIndex = position + oldWord.Length;
}
}

关于c# - 使用 string.Replace 来匹配整个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8605299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com