You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#/正则如何查找替换字符串中每第n次出现的指定字符(JS转C#)

功能需求

查找并替换给定字符串中每第3次出现的指定字符,将其替换为H

  • 输入示例:74Mercedes1980
  • 预期输出:74HerHedHs1H80
  • 实现要求:可选择C#原生代码或正则表达式实现

C#正则实现(等效原JS逻辑)

原JS正则核心逻辑为全局匹配「连续出现n-1次目标字符+中间非目标字符内容+第n个目标字符」,捕获前半段内容后,替换时保留捕获内容、仅把第n个目标字符换成指定替换值。C#中直接使用Regex.Replace即可实现等效全局替换,代码已自动处理正则元字符转义问题:

using System.Text.RegularExpressions;

/// <summary>
/// 替换字符串中每第n次出现的指定字符
/// </summary>
/// <param name="input">原始输入字符串</param>
/// <param name="target">待查找的目标字符</param>
/// <param name="replaceVal">替换后的字符</param>
/// <param name="n">每第n次命中时替换,默认值为3</param>
public static string ReplaceNthOccurrenceRegex(string input, char target, char replaceVal, int n = 3)
{
    string escapedTarget = Regex.Escape(target.ToString());
    string pattern = $"((?:[^{escapedTarget}]*{escapedTarget}){{{n-1}}}[^{escapedTarget}]*){escapedTarget}";
    return Regex.Replace(input, pattern, $"$1{replaceVal}");
}

// 调用示例
// string testInput = "74Mercedes1980";
// string result = ReplaceNthOccurrenceRegex(testInput, 'e', 'H');

说明:如果目标字符是.、*、$这类正则特殊元字符,Regex.Escape会自动完成转义,无需手动调整匹配规则。


C#原生遍历实现(无正则依赖,性能更优)

不想引入正则的场景可以直接遍历字符数组计数实现,逻辑更直观,长字符串处理场景下性能明显优于正则方案:

/// <summary>
/// 替换字符串中每第n次出现的指定字符(原生遍历版)
/// </summary>
public static string ReplaceNthOccurrenceNative(string input, char target, char replaceVal, int n = 3)
{
    char[] charArr = input.ToCharArray();
    int hitCount = 0;
    for (int i = 0; i < charArr.Length; i++)
    {
        if (charArr[i] == target)
        {
            hitCount++;
            if (hitCount == n)
            {
                charArr[i] = replaceVal;
                hitCount = 0;
            }
        }
    }
    return new string(charArr);
}

// 调用示例
// string testInput = "74Mercedes1980";
// string result = ReplaceNthOccurrenceNative(testInput, 'e', 'H');

内容的提问来源于stack exchange,提问作者user8189

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 06:15:36