Regex.Replace() Dictionary的优先级问题

okeyes 2009-04-17 07:55:51
string str = "a1_a2_a3";

Dictionary<string, string> d = new Dictionary<string, string>();
d.Add("a1", "北京");
d.Add("a2", "上海");
d.Add("a3", "广州");

Regex regex = new Regex(@"\w\d");

string str2 = regex.Replace(str,"中");
//这样的结果是str2为中_中_中

string str2 = regex.Replace(str, "$0=$0");
//这样的结果是str2为a1=a1_a2=a2_a3=a3

string str2 = regex.Replace(str, d["a1"]);
//这样的结果是str2为北京_北京_北京

string str2 = regex.Replace(str, d["$0"]);
//为什么这样运行就出错?
//$0不是依次为a1,a2,a3吗?


真搞不明白。是不是d[]的优先级与正则表达式的$0的问题。没学过正则表达式啊。


...全文
131 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
okeyes 2009-04-18
  • 打赏
  • 举报
回复
谢谢各位大侠。结帖了。
最喜欢ojlovecd的
string str2 = regex.Replace(str, match => d[match.Value]);


其他的也可行。
我姓区不姓区 2009-04-17
  • 打赏
  • 举报
回复
如果楼主用的是vs2008,可以更简单:

string str2 = regex.Replace(str, match => d[match.Value]);
我姓区不姓区 2009-04-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wuyi8808 的回复:]
ojlovecd的正则不错,我把它简化了一下:
C# codestringstr2=regex.Replace(str,delegate(Match match) {returnd[match.Value]; });
[/Quote]
wuyi8808 2009-04-17
  • 打赏
  • 举报
回复
ojlovecd的正则不错,我把它简化了一下:
string str2 = regex.Replace(str, delegate(Match match) { return d[match.Value]; });
wuyi8808 2009-04-17
  • 打赏
  • 举报
回复
using System;
using System.Collections.Generic;

class A
{
static void Main()
{
string str = "a1_a2_a3";

Dictionary <string, string> d = new Dictionary <string, string>();
d.Add("a1", "北京");
d.Add("a2", "上海");
d.Add("a3", "广州");

foreach (string key in d.Keys)
{
str = str.Replace(key, d[key]);
}
Console.WriteLine(str); // 输出:北京_上海_广州
}
}
我姓区不姓区 2009-04-17
  • 打赏
  • 举报
回复
try:

string str2 = regex.Replace(str, new MatchEvaluator(delegate(Match match) { return d[match.Groups[0].Value]; }));
kkun_3yue3 2009-04-17
  • 打赏
  • 举报
回复
string str2 = regex.Replace(str, d["$0"]);

改成这样试试嗫?

string str2 = regex.Replace(str, "$0");
kkun_3yue3 2009-04-17
  • 打赏
  • 举报
回复
string str2 = regex.Replace(str, d["$0"]);
//为什么这样运行就出错?
//$0不是依次为a1,a2,a3吗?


$0在这里被认为是key值了,你根本就没有这样的key
只有a1,a2,a3三个key

110,538

社区成员

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

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

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