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

2023-12-13

我正在使用 NET 2.0 和 WinForms。

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

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

它应该只替换第一个实例COUNTER with COUNT,因为这是整个词。然而,似乎string.Replace不考虑整个单词。

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


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

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

\b标记单词边界。


正则表达式的唯一替代方法是开发自己的算法!搜索“COUNTER”并测试前一个和后一个字符是否不是单词字符。


EDIT:

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

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;
            }
        }
    }
}

EDIT #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;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 string.Replace 来匹配整个单词 的相关文章

  • 在 LINQ 查询中进行转换

    是否可以在 LINQ 查询中进行强制转换 为了编译器的缘故 下面的代码并不糟糕 但最好将其放入一个查询中 Content content dataStore RootControl as Controls Content List
  • 使用管道在父级和子级之间传递整数值

    我对如何正确使用 pipeline 在两个进程之间传递整数值有点困惑 在我的程序中 我首先创建一个管道 然后分叉它 我假设我有 两个 管道 据我了解 这是我的任务 我的父母通过 for 循环检查某个操作的整数值 i 增加计数变量 并将值保存
  • 并行运行多个任务

    我有一个代理列表 每个代理都会访问不同的站点并从站点中提取所需的数据 目前它一次只做一个 但我希望同时运行 10 20 个任务 这样它就可以一次性从 20 个站点下载 而不是只下载一个 这是我目前正在做的事情 private async T
  • SOAP Web 服务:多台服务器,一个接口

    我有一个场景 需要任意数量的服务器来提供相同的 SOAP Web 服务 我想生成一组代理类 并能够为它们提供一个位置 以便在运行时将它们指向不同的服务器 不幸的是 看起来好像wsdl port节点 子节点wsdl service 要求对特定
  • 使用 POST 的 HttpWebRequest 的性能

    我有一个用于测试网络服务的小工具 它可以使用 POST 或 GET 调用 Web 服务 使用POST的代码是 public void PerformRequest WebRequest webRequest WebRequest Creat
  • 如何使用T4从一个模板同时生成两个文件?

    我遇到的情况是 我需要生成两个 CSharp 代码文件 它们的代码几乎相同 但方法的输入和输出类型的命名空间不同 事实上 每个文件都针对特定国家 地区 并且类型来自特定国家 地区的 WSDL 我正在围绕服务编写一些包装器 逻辑完全相同 但从
  • 从结构调用 C++ 成员函数指针

    我找到了有关调用 C 成员函数指针和调用结构中的指针的信息 但我需要调用结构内部存在的成员函数指针 但我无法获得正确的语法 我在类 MyClass 的方法中有以下代码片段 void MyClass run struct int MyClas
  • Visual Studio 2013 调试器显示 std::string 的奇怪值

    我有一个大型的 cmake 生成的解决方案 其中包含许多项目 由于某种原因 我无法查看字符串的内容 因为根据调试器 Bx Buf含有一些垃圾 text c str 正确返回 Hello 该问题不仅仅发生在本地字符串上 返回的函数std st
  • 获取列表框中视图中的项目

    我有一个 ListBox 其属性 VirtualizingStackPanel VirtualizationMode 设置为 回收 我正在绑定一个自定义集合 实现IList and IList
  • 用于 C++ 中图像分析的 OpenCV 二进制图像掩模

    我正在尝试分析一些图像 这些图像的外部周围有很多噪声 但内部有一个清晰的圆形中心 中心是我感兴趣的部分 但外部噪声正在影响我对图像的二进制阈值处理 为了忽略噪音 我尝试设置一个已知中心位置和半径的圆形蒙版 从而使该圆之外的所有像素都更改为黑
  • 公交车公共交通算法

    我正在开发一个可以查找公交路线的离线 C 应用程序 我可以提取时间表 巴士 路线数据 我正在寻找适用于基本数据的最简单的解决方案 可以使用什么算法来查找从巴士站 A 到巴士站 B 的路线 是否有适用于 C Java 的开源解决方案 数据库的
  • 重载算术运算符

    赋值运算符可以声明为 T 运算符 const t 在类中 但不能以这种方式定义算术运算符 它必须是友元函数 我不明白为什么 你能解释一下吗 算术运算符不必须是友元 那么你可以这样定义 MyClass MyClass operator con
  • X 轴和 Z 轴上的 Quaternion.Slerp,无 Y 轴

    I am trying to rotate the Player about X Y and Z axis The Y axis should not move from last angle Example if I rotate 45
  • MINIX内部碎片2

    我正在用 C 语言编写一些软件 它递归地列出给定目录中的所有文件 现在我需要计算出内部碎片 我花了很长时间研究这个问题 发现 ext2 上的内部碎片只发生在最后一个块中 我知道理论上你应该能够从索引节点号获得第一个和最后一个块地址 但我不知
  • 具有多个父项的 Qt 树模型

    我想构建一棵树 其中一个元素可以引用另一个元素 我想要构建的树是 像这样的东西 A B C D E F P this is a pointer to C D first child of C E second child of C I fo
  • 让 Windows 尝试读取文件

    我正在对 Windows 文件系统进行某种封装 当用户请求打开文件时 Windows 调用我的驱动程序来提供数据 在正常操作中 驱动程序返回缓存的文件内容 但是 在某些情况下 实际文件没有缓存 我需要从网络下载它 问题是是否有可能让 Win
  • C# 多维数组解析

    我有一个多维数组 内容在调试器中看起来像这样 数组设置为 String s new String 6 4 A B Yes C A B Yes C A B No C A B Yes C A B Yes C A B Yes C A B No C
  • 异步/等待 - 是*并发*吗?

    我一直在考虑 C 5 中新的异步内容 并且出现了一个特殊问题 据我了解 await关键字是一个简洁的编译器技巧 语法糖来实现连续传递 http en wikipedia org wiki Continuation passing style
  • 使用空的weak_ptr作为参数调用map::count安全吗?

    打电话安全吗map count http www cplusplus com reference map map count on an 未初始化因此为空weak ptr http en cppreference com w cpp mem
  • NHibernate:无状态会话错误消息无法获取代理

    我正在使用 nHibernate 无状态会话来获取对象 更新一个属性并将对象保存回数据库 我不断收到错误消息 无状态会话无法获取代理 我在其他地方有类似的代码 所以我不明白为什么这不起作用 有谁知道问题可能是什么 我正在尝试更新Screen

随机推荐

  • 使 Tkinter 窗口显示在任务栏中

    我希望我的程序显示在任务栏中 但仍然没有传统的 Windows 边框 我该怎么办 我知道self overrideredirect 1 但是这会将我的程序从任务栏中删除 这是针对 Windows 7 的 我并不认为这是 正确 的方法 但看看
  • 获取连接到 C# .NET WebAPI 应用程序的客户端的 IP 地址

    我试过 private const string HttpContext MS HttpContext private const string RemoteEndpointMessage System ServiceModel Chann
  • zend 与 select 的关系

    我是 zend 的新手 我被要求重新开发一个曾经用纯 PHP 编写的网站并将其放入 zend 框架中 我在数据库关系方面遇到很多麻烦 我似乎无法专心定义和查询关系 我想找一个类别 从该类别中 我希望能够找到与其关联的所有类别信息 并能够查询
  • 是否可以使用Python的requests库设置代理链?

    标准情况如下 公司的安全策略要求所有员工使用公司的代理服务器 需要授权 来获取任何 https 资源 为了通过 Python 解释器成功使用任何互联网连接 我必须手动 set HTTP PROXY http
  • 价格 woocommerce 中的小数分隔符

    Hi everyone I have this configuration in my woocommerce And in my product I have this 但当我显示价格时 它返回 4 95 而不是 4 95 我用这个来获取
  • 在 Hibernate 中混合 HQL 和 Criteria API

    是否可以混合使用 HQL 和 Criteria API 我有一个String包含 HQL 中的 where 条件和Criteria它已经建成并从其他地方获得 我想知道是否可以添加where条件String to Criteria add w
  • 使用 Spring CloudVault 时应用程序初始化时出现禁止错误

    使用 Spring Cloud HOXTON SR6 和 Spring boot 2 3 2 启动服务时 尝试访问 secret application 和 secret application profile 时出现 403 错误 这些路
  • 按自定义顺序对字符串数组进行排序

    我想按照我提到的顺序对字符串数组中的一组固定字符串进行排序 例如 文本文件 图像文件 音频文件 视频文件 应用程序文件 其他文件 示例1 如果我的字符串数组输入是这样的 inputval 0 Other files inputval 1 I
  • 用于获取 JavaFX WebView 控制台事件的公共 API 是什么?

    我想记录 WebView 控制台事件 他们有时会发现所使用的底层浏览器中的怪癖 并可以帮助排除故障 可以使用 Sun 实现类与 WebView 控制台交互 import WebConsoleListener setDefaultListen
  • 将方法指针从 C# 传递到 Delphi DLL

    我在将字符串作为 PChar 传递到 Delphi 构建的 DLL 时遇到了一些问题 感谢 Jens M hlenhoff 解决了它 现在我有另一个问题 如果 Delphi 声明是常规类型过程 则在传递给 DLL 时我已成功回调 c 方法
  • 将 razor 视图渲染为字符串而不修改 html

    我之前找到过有关如何将 MVC 4 视图渲染为字符串的答案 但是 我开始使用视觉工作室2013而现在的结果并不如预期 见下文 lt A gt lt B gt lt C gt class panel lt D gt gt lt E gt cl
  • MongoDB 和类验证器唯一验证 - NESTJS

    TL DR 我正在尝试在我的验证器中运行猫鼬查询 您好 我正在尝试制作一个自定义装饰器 如果该字段的值已存在 它会抛出错误 我正在尝试在验证路线的类中使用猫鼬模型 与解析器 控制器不同 InjectModel 不适用于验证器类 我的验证器是
  • 使用 jquery ui 模式对话框提交表单

    提交表单时 我在使用 JQuery UI 模态对话框时遇到困难 目的是您点击提交按钮 模式弹出窗口 根据您在模式中的选择 表单要么提交 要么不提交 相反 模式会弹出并自动提交 前端 div title Basic dialog p Plea
  • 如何将 JavaScript 对象编码为 JSON?

    有没有一种将 JavaScript 对象编码为 JSON 的好方法 我有一个键值对列表 其中名称来自复选框 并且值根据该框是否被选中而为 true 或 false var values checks checkbox each functi
  • 在颜色空间中的scale_fill/color中粘贴名称不能循环工作

    使用时缩放填充连续发散 from colorspace里面一个for loop or function不粘贴name图例标题并通过错误 如下例所示 library ggplot2 library colorspace set seed 10
  • 尝试用 JPanel 画线

    我正在尝试使用画线JPanel我已经碰壁了 我可以将两侧朝下 但是一旦涉及到从 x 线中减去 一切都会出错 package GUIstuff import java awt Graphics import javax swing JPane
  • 为什么无符号n位整数的最大值是2ⁿ-1而不是2ⁿ?

    The maximum value of an n bit integer is 2n 1 Why do we have the minus 1 Why isn t the maximum just 2n The 1因为整数是从0开始的 但
  • 如何在 C++ 端获取 QQuickItem 的有效实例

    好吧 我进行了很多搜索 但还没有找到好的解决方案 我是新来的Qt 我有一堂课是QQuickItem像这样 class MyQuickItemClass public QQuickItem Q OBJECT SetInfo SomeCppCl
  • 如何使用 SQL 查找缺失的数据行?

    我的问题 我有一个MySQL数据库 它按时间顺序存储大量气象数据 每10分钟插入一次新数据 不幸的是 已经发生了几次停电 因此某些行丢失了 我最近设法从气象站获取了某些备份文件 现在我想用它们来填充丢失的数据 DB 的结构如下 示例 dat
  • 使用 string.Replace 来匹配整个单词

    我正在使用 NET 2 0 和 WinForms 目前 我需要一段代码来将给定文本中的一个字符串替换为另一个字符串 但在文本中它应该只查找整个单词 我的意思是 string name COUNTER 40 CLOCK COUNTER 60