正则替换错误问题

【Help】 2016-03-22 11:08:53

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication13
{
class Program
{
static void Main(string[] args)
{
List<Tag> list = new List<Tag>()
{
new Tag { Caption="测试1",Url="http://www.test1.com"},
new Tag { Caption="测试2",Url="http://www.test1.com"},
new Tag { Caption="测试3",Url="http://www.test1.com"}
};
string html = "afsafsaf<img title='A测试1BB'/>safasfa";
list.GroupBy(x => x.Url).Select(x => x.First()).Take(5).ToList().ForEach(x =>
{
var regex = new System.Text.RegularExpressions.Regex("(?<=[^>])" + x.Caption + "(?=[^<])");
html = regex.Replace(html, $"<a href='{x.Url}' style='color:#0380d7;' target='_blank'>{x.Caption}</a>", 1);
});

Console.WriteLine(html);
}
}
class Tag
{
public string Caption { get; set; }
public string Url { get; set; }
}
}

代码如上,输出的结果是
afsafsaf<img title='A<a href='http://www.test1.com' style='color:#0380d7;' target='_blank'>测试1</a>BB'/>safasfa 这不是我想要的替换方式,关键字替换不希望将属性里面的关键字也替换加链接,不知道这里的正则应该怎么改
...全文
157 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
【Help】 2016-04-06
  • 打赏
  • 举报
回复
lst.GroupBy(x => x.Url).Select(x => x.First()).Take(5).ToList().ForEach(x => { var regex = new System.Text.RegularExpressions.Regex("(?<=^|>)[^<>]*(?=<|$)"); var count = 0; subtext = regex.Replace(subtext, m => { if (count == 0 && m.Value.Contains(x.Caption)) { count++; return new Regex(x.Caption).Replace(m.Value, $"<a href='{x.Url}' style='color:#0380d7;' target='_blank'>{x.Caption}</a>", 1);// m.Value.Replace(x.Caption, $"<a href='{x.Url}' style='color:#0380d7;' target='_blank'>{x.Caption}</a>"); } return m.Value; }); }); contentHtml += subtext;
【Help】 2016-04-01
  • 打赏
  • 举报
回复
var regex = new System.Text.RegularExpressions.Regex("(?<=^|>)[^<>]*(?=<|$)"); var count = 0; subtext = regex.Replace(subtext, m => { if (count == 0 && m.Value.Contains(x.Caption)) { count++; return m.Value.Replace(x.Caption, $"<a href='{x.Url}' style='color:#0380d7;' target='_blank'>{x.Caption}</a>"); } return m.Value; });
  • 打赏
  • 举报
回复
只要替换一个的话也是一样的啊,你可以通过m.Value.IndexOf来取到你要替换值的第一个位置,然后截取也好,替换也罢,随便你怎么做了啊
  • 打赏
  • 举报
回复
然后正则替换部分后面还是可以加参数1的吧
【Help】 2016-03-22
  • 打赏
  • 举报
回复
有人知道吗 ??
【Help】 2016-03-22
  • 打赏
  • 举报
回复
引用 3 楼 starfd 的回复:
string html = "afsafsaf<img title='A测试1BB'/>safasfa测试";
Regex regex = new Regex("(?<=^|>)[^<>]*(?=<|$)");
Console.WriteLine(regex.Replace(html,"###$0###"));
没看懂为啥你直接将你的Caption作为正则的一部分传递,正常不应该是获取到值,然后再对这个值进行普通替换么? 也就是
regex.Replace(html,m=>{
return m.Value.Replace("测试1","http://www.baidu,com");
})
明白了,谢谢!
【Help】 2016-03-22
  • 打赏
  • 举报
回复
引用 3 楼 starfd 的回复:
string html = "afsafsaf<img title='A测试1BB'/>safasfa测试";
Regex regex = new Regex("(?<=^|>)[^<>]*(?=<|$)");
Console.WriteLine(regex.Replace(html,"###$0###"));
没看懂为啥你直接将你的Caption作为正则的一部分传递,正常不应该是获取到值,然后再对这个值进行普通替换么? 也就是
regex.Replace(html,m=>{
return m.Value.Replace("测试1","http://www.baidu,com");
})
大哥我那个完整的应该是怎么改的?
  • 打赏
  • 举报
回复
string html = "afsafsaf<img title='A测试1BB'/>safasfa测试";
Regex regex = new Regex("(?<=^|>)[^<>]*(?=<|$)");
Console.WriteLine(regex.Replace(html,"###$0###"));
没看懂为啥你直接将你的Caption作为正则的一部分传递,正常不应该是获取到值,然后再对这个值进行普通替换么? 也就是
regex.Replace(html,m=>{
return m.Value.Replace("测试1","http://www.baidu,com");
})

62,244

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧