求 C# 正则表达式

_z3422_ 2014-10-09 03:03:07
   Dictionary<string, string> str = new Dictionary<string, string>();
str.Add("a1", KryptonTextBox1.Text);
str.Add("a2", KryptonTextBox2.Text);
str.Add("a3", KryptonTextBox3.Text);
try
{
string temp = textABC.Text;
foreach (KeyValuePair<string, string> kv in str)
{
temp = Regex.Replace(temp, string.Format("^{0}|{0}$|(?<=[-+ (*/]){0}(?=[-+ )*/])", kv.Value), kv.Key);
}
Expression ep = new Expression(temp);
//Expression ep = new Expression(textABC.Text.Replace(str["a1"], "a1").Replace(str["a2"], "a2").Replace(str["a3"], "a3"));
ep.Parameters["a1"] = Convert.ToDouble(textA.Text);
ep.Parameters["a2"] = Convert.ToDouble(textB.Text);
ep.Parameters["a3"] = Convert.ToDouble(textC.Text);

labResult.Text = ep.Evaluate().ToString();
}
catch (Exception ex)
{
labResult.Text = ex.Message;
}


上面这段代码里,foreach 里的替换好像没实现,有没大牛可以把这个正则补充完整?
想达到的效果是
在工资表达式里 住宿 * 300 + 水电 *1.5 + 早餐 * 3 + 午餐 *8+ 晚餐 *8
经过替换后得到 A1 *300 + A2 * 1.5 + A3 *3 + A4 * 8 +A5*8
str 里保存了所有的项目 { A1 住宿 }{A2 水电}{A3 早餐}{A4 午餐}{A5 晚餐}

所以正则要求是 找出 str 的 value 并 替换成 key
正则要求 字符串匹配 左右 结束 或为空 或是 + - * / 符号
...全文
138 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
_z3422_ 2014-10-09
  • 打赏
  • 举报
回复
可我觉得这样是为了避免未知的BUG 啊,目前已使用上面的正则表达式达到了我的正则替换效果 比如变量 张三 和变量 张三丰 就不会在 Replace 张三 时出错了。
猴子写代码 2014-10-09
  • 打赏
  • 举报
回复
简单问题变复杂可以学到很多东西
SuperLampard 2014-10-09
  • 打赏
  • 举报
回复
能把问题简单化最好,而不是一味追求正则表达式,解决问题提高效率才是王道,老板和客户看的是你的效率,而不去关心你写的代码多么的牛X
_z3422_ 2014-10-09
  • 打赏
  • 举报
回复
额,只是希望解决方案不止一个地方可用 这是引用 Flee 这个Dll 但它的变量不支持中文 所以想把这代码写到 Dll 里去 刚测试通过,但 Max(伙食费,200) 时报错,所以正则里加了,
^{0}(?=[-+ */])|(?<=[-+ ,(*/]){0}(?=[-+ ,)*/])|(?<=[-+ */]){0}$
留个记号
shawn_yang 2014-10-09
  • 打赏
  • 举报
回复
简单问题复杂化,不过只要你能解决问题就行。
_z3422_ 2014-10-09
  • 打赏
  • 举报
回复
“^{0}(?=[-+ */])|(?<=[-+ (*/]){0}(?=[-+ )*/])|(?<=[-+ */]){0}$”
正则写成这样了 谁来挑错或接分
_z3422_ 2014-10-09
  • 打赏
  • 举报
回复
我还是觉着正则更靠谱一些 用替换容易出问题
於黾 2014-10-09
  • 打赏
  • 举报
回复
最简单的办法,先替换加班费,再替换加班 A1写成A01,就不至于跟A12混到一起 有时候简单问题就简单处理,不要搞的太复杂了
_z3422_ 2014-10-09
  • 打赏
  • 举报
回复
因为我想把它做成通用的 最终能达到公式不会被类似于 加班 和 加班费 混在一起了的情况 replace 容易造成这个效果,所以想用正则来精确匹配 这个替换会先把 中文变量 替换成 英文变量 再反过来替换英文为中文变量 用正则才不会把 A12 和 A1 replace 到一起
於黾 2014-10-09
  • 打赏
  • 举报
回复
不要为了正则而正则 类似这种简单应用,就是1对1的替换最简单了,加了通配符匹配反而效率不高
於黾 2014-10-09
  • 打赏
  • 举报
回复
你直接把住宿替换成A1,水电替换成A2不就完啦 搞什么正则匹配

110,539

社区成员

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

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

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