c# - 替换文本中的所有匹配文本
问题描述
检查下面的代码。我想用文本[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。我必须在方法中替换它,所以我没有使用整个字符来查找
解决方案
如果我正确理解了您的问题,也许这就是您要寻找的东西。我知道正则表达式很痛苦,但它比使用幼稚的方法(使用 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
}
}
推荐阅读
- ios - 如何从屏幕底部弹出 tableView?
- javascript - 如何在js折线图中获取两个输出JSON对象?
- d3.js - d3js v5:使用 JSON 文件中的组创建 SVG
- php - json_encode 不适用于嵌套数组
- arrays - 根据密钥更改字母(加密)
- java - 使用 Windows power shell 运行时发生错误。发生 JNI 错误,请检查您的安装并重试
- ibm-cloud - 将 ibm cloud app-connect 与 mq 连接的最佳方式是什么?
- microsoft-graph-api - 不是通过 Graph API 创建的组
- javascript - Vue.js - 设置动态复选框值真/假
- python - 如何从数据框中的地址列表中查找坐标