C# 替换文本中所有匹配的文本

C# 替换文本中所有匹配的文本,c#,C#,检查下面的代码。我想用文本中的真实图像标记替换所有匹配的文本[img=15]。我已经创建了名为replacematting()的方法,但问题是这只能替换第一个匹配,而不能替换文本中的所有匹配。有人能帮我在这个方法上实现循环,这样它就可以替换所有匹配吗 C#: publicstaticvoidmain() { string text=“abcdef[img=15]ghijklmnop[img=16]qrstuvxyz”; 字符串foo=ReplaceMatching(文本,“[img=”,”);

检查下面的代码。我想用文本中的真实图像标记替换所有匹配的文本
[img=15]
。我已经创建了名为
replacematting()
的方法,但问题是这只能替换第一个匹配,而不能替换文本中的所有匹配。有人能帮我在这个方法上实现循环,这样它就可以替换所有匹配吗

C#:

publicstaticvoidmain()
{
string text=“abcdef[img=15]ghijklmnop[img=16]qrstuvxyz”;
字符串foo=ReplaceMatching(文本,“[img=”,”);
控制台写入线(foo);
}
私有静态字符串替换匹配(字符串源、字符串查找、字符串替换)
{
int Place=Source.IndexOf(Find);
字符串结果=Source.Remove(Place,Find.Length)。Insert(Place,Replace);
返回结果;
}
测试链接:

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

使用系统;
使用System.Text.RegularExpressions;
公共课程
{
公共静态void Main()
{
string text=“abcdef[img=15]ghijklmnop[img=16]qrstuvxyz”;
字符串replaced=Regex.Replace(文本,@“\[img=(.*?\]”,“”);
//结果=Regex.Replace(输入、模式、替换);
Console.WriteLine(已替换);//abcdefghijklmnopqrstuvxyz
}
}

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

使用系统;
使用System.Text.RegularExpressions;
公共课程
{
公共静态void Main()
{
string text=“abcdef[img=15]ghijklmnop[img=16]qrstuvxyz”;
字符串replaced=Regex.Replace(文本,@“\[img=(.*?\]”,“”);
//结果=Regex.Replace(输入、模式、替换);
Console.WriteLine(已替换);//abcdefghijklmnopqrstuvxyz
}
}

您可以为此使用正则表达式。例如:

public class Program
{
    public static void Main()
    {
        string text = "abcdef[img=15]ghijklmnop[img=16]qrstuvwxyz";
        
        var regex = new Regex(@"\[img=(\d+)\]");
        var foo = regex.Replace(text, "<img src='$1'>");
        
        Console.WriteLine(foo);
    }
}
公共类程序
{
公共静态void Main()
{
string text=“abcdef[img=15]ghijklmnop[img=16]qrstuvxyz”;
var regex=new regex(@“\[img=(\d+)\]”);
var foo=regex.Replace(文本“”);
控制台写入线(foo);
}
}

您可以为此使用正则表达式。例如:

public class Program
{
    public static void Main()
    {
        string text = "abcdef[img=15]ghijklmnop[img=16]qrstuvwxyz";
        
        var regex = new Regex(@"\[img=(\d+)\]");
        var foo = regex.Replace(text, "<img src='$1'>");
        
        Console.WriteLine(foo);
    }
}
公共类程序
{
公共静态void Main()
{
string text=“abcdef[img=15]ghijklmnop[img=16]qrstuvxyz”;
var regex=new regex(@“\[img=(\d+)\]”);
var foo=regex.Replace(文本“”);
控制台写入线(foo);
}
}

这很容易出错-存在现有的bbtext解析器。您需要regex.replace来执行此操作。任何人都可以用示例回答?@DillGates您提供的示例dotnetfiddle将[img=15]替换为15]。这看起来不对。应该是吗?
后面的数字是动态的,它是一个图像唯一id。我必须在方法中替换它,所以我没有使用整型字符来查找非常容易出错的内容-存在现有的bbtext解析器。您需要regex.replace来执行此操作。任何人都可以用示例进行回答?@DillGates示例dotnetfi您提供的ddle将[img=15]替换为15]。这看起来不对。应该是这样吗?
后面的数字是动态的,它是一个图像唯一id。我必须在方法中替换它,所以我没有使用整个字符来查找
public class Program
{
    public static void Main()
    {
        string text = "abcdef[img=15]ghijklmnop[img=16]qrstuvwxyz";
        
        var regex = new Regex(@"\[img=(\d+)\]");
        var foo = regex.Replace(text, "<img src='$1'>");
        
        Console.WriteLine(foo);
    }
}