正则表达式 替换

coley 2009-02-18 06:08:38
string strOld ="Case When (UserMoney<5000 and WorkAge<= 100) then (UserMoney * 0.92) When (WorkAge> 15) then (UserMoney * 0.95) End ";
如何用正则替换 then............when|end 之间的"UserMoney"字符,替换为"NewMoney"
谢谢
...全文
143 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
a6225822 2009-03-02
  • 打赏
  • 举报
回复
ddd
a6225822 2009-03-02
  • 打赏
  • 举报
回复
sadasd
-过客- 2009-02-18
  • 打赏
  • 举报
回复
正则委托典型应用...

string strOld = "Case  When (UserMoney <5000 and WorkAge <= 100) then (UserMoney * 0.92) When (WorkAge> 15) then (UserMoney * 0.95) End ";
string result = Regex.Replace(strOld, @"then((?!then|when|end)[\s\S])*(when|end)", delegate(Match m) { return m.Value.Replace("UserMoney", "NewMoney"); }, RegexOptions.IgnoreCase);
richTextBox2.Text = result;


CutBug 2009-02-18
  • 打赏
  • 举报
回复
string strOld = "Case  When (UserMoney >0 and WorkAge <= 100) then (UserMoney * 0.91) Case  When (UserMoney <5000 and WorkAge <= 100) then (UserMoney * 0.92) When (WorkAge> 15) then (UserMoney * 0.95) End ";
string p = @"(?<![\s\S]+when[\s\S]+)(When[\s\S]+)(UserMoney)(?=[\s\S]+End)";
strOld = Regex.Replace(strOld, p, "${1}aaa",RegexOptions.IgnoreCase);
Console.WriteLine(strOld);


输出
Case When (UserMoney >0 and WorkAge <= 100) then (UserMoney * 0.91) Case When
(UserMoney <5000 and WorkAge <= 100) then (UserMoney * 0.92) When (WorkAge> 15)
then (aaa * 0.95) End
请按任意键继续. . .
king19840811 2009-02-18
  • 打赏
  • 举报
回复
strOld 是可变的太难了。。
liuyeede 2009-02-18
  • 打赏
  • 举报
回复
(\bThen\b)(\w+(?=*))(?(\1)\bWhen\b)|(\bThen\b)(\w+(?=*))(?(\4)\bEnd\b)
coley 2009-02-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 cppfaq 的回复:]
引用 2 楼 coley 的回复:
呵呵,不行.strOld 是可变的,只能替换 then ...... when|end之间的

那就先str.Substring(str.IndexOf("then"))再Replace呢?
[/Quote]
也要考虑效率,所以想正则一次就替换了,不用去拆分字符串处理.谢谢
liuyeede 2009-02-18
  • 打赏
  • 举报
回复
.+(?=*)
cppfaq 2009-02-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 coley 的回复:]
呵呵,不行.strOld 是可变的,只能替换 then ...... when|end之间的
[/Quote]
那就先str.Substring(str.IndexOf("then"))再Replace呢?
cppfaq 2009-02-18
  • 打赏
  • 举报
回复
直接不行么?

str.Replace("oldValue","newValue")
coley 2009-02-18
  • 打赏
  • 举报
回复
呵呵,不行.strOld 是可变的,只能替换 then ...... when|end之间的
liuyeede 2009-02-18
  • 打赏
  • 举报
回复
你直接找到“*”之前的UserMoney后换成NewMoney就可以了吧?

62,041

社区成员

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

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

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

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