首页 > 解决方案 > 替换文本中的所有匹配文本

问题描述

检查下面的代码。我想用文本[img=15]中的真实图像标签替换所有匹配的文本。我已经创建了调用方法ReplaceMatching(),但问题是这只能替换第一个匹配而不是文本中的所有匹配。任何人都可以帮助我在此方法上实现循环,以便替换所有匹配项?

C#:

public static void Main()
    {
        string text = "abcdef[img=15]ghijklmnop[img=16]qrstuvwxyz";
        string foo = ReplaceMatching(text,"[img=","<img src=''>");
        Console.WriteLine(foo);
    }
    
    
 private static string ReplaceMatching(string Source, string Find, string Replace)
        {
            int Place = Source.IndexOf(Find);
            string result = Source.Remove(Place, Find.Length).Insert(Place, Replace);
            return result;
        }

测试链接:https ://dotnetfiddle.net/Mstl95

注意:<img src= 后面的数字是动态的,它是一个图像唯一 ID。我必须在方法中替换它,所以我没有使用整个字符来查找

标签: c#

解决方案


如果我正确理解了您的问题,也许这就是您要寻找的东西。我知道正则表达式很痛苦,但它比使用幼稚的方法(使用 foreach 扫描字符串)要好得多。这是一个带有组捕获的正则表达式惰性搜索。该组是括号内的内容,该组将被替换为 $1。如果您需要更多组,只需将它们放在括号之间并添加 $2、$3 等。*?意思是:.=一切。*=任意次数的重复。?= 可能的最短匹配(以避免在下一场比赛结束之前获得匹配):

using System;
using System.Text.RegularExpressions;
                
public class Program
{
    public static void Main()
    {
    string text = "abcdef[img=15]ghijklmnop[img=16]qrstuvwxyz";
    string replaced = Regex.Replace(text,@"\[img=(.*?)\]","<img src='$1'>"); 
    //result = Regex.Replace(input, pattern, replacement);
    Console.WriteLine(replaced); // abcdef<img src='15'>ghijklmnop<img src='16'>qrstuvwxyz
    }
}

推荐阅读