关于正则表达式的问题

O西瓜 2004-08-16 12:06:29
假设有一段字符如下"[blue]aaaaaaaaaaaaaaaaaa[blue]bbbbb[/blue]aa[/blue]"
如何用一个正则表达式匹配并提取两个[blue][/blue]中的内容
结果为"<font color=blue>aaaaaaaaaaaaaaaaaa<font color=blue>bbbbb</font>aa</font>"

谢谢
...全文
131 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
saucer 2004-08-16
  • 打赏
  • 举报
回复
it is very hard to do nested matching, but for you case, you can consider to run multiple passing through, although it is not very efficient, for example,


string s = "[blue]aaaaaaaaaaaaaaaaaa[blue]bbbbb[/blue]aa[/blue][blue]ccccc";

string sp = @"\[(?<color>[^]]+)\](?<content>.*?)\[/\k<color>\]";
string sr = "<font color=${color}>${content}</font>";
string s2;
do
{
s2 = s;
s = Regex.Replace(s2,sp , sr, RegexOptions.IgnoreCase);
}
while (s2 != s);

Console.WriteLine(s2);

sgwindy 2004-08-16
  • 打赏
  • 举报
回复
ding
O西瓜 2004-08-16
  • 打赏
  • 举报
回复
用替换很难实现的,比如前面只有[blue],但后面没有,像这样"[blue]ccccc",那就不应该替换它,而且[blue]出现的次数是不定的
qingyun1020 2004-08-16
  • 打赏
  • 举报
回复
实现这个目的应该不用正则表达式就可以吧,用替换将这两个内容替换成你想要的

可能使用的语句会多点
saucer 2004-08-16
  • 打赏
  • 举报
回复
@"\[color=(?<color>[^]]+)\](?<content>.*?)\[/color]";
y1900808y 2004-08-16
  • 打赏
  • 举报
回复
学习
O西瓜 2004-08-16
  • 打赏
  • 举报
回复
谢谢,解決我大部分問題了,但还有一种情况,"aaaaaaaa",要换成
"<font color=#123456>aaaaaaaa</font>"

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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