.Net正则表达式无法正确替换

时间:2014-05-09 05:48:57

标签: c# regex

背景

我正在尝试进行一些正则表达式匹配和替换,但由于某些原因,替换在.NET中不正确。

正则表达式 - "^.*?/rebate/?$"

输入字符串 - "/my-tax/rebate"

替换字符串 - "/new-path/rebate"

基本上,如果单词' 返回'在字符串中看到,输入字符串需要完全由替换字符串替换。

问题

如果我使用模式创建一个正则表达式并执行

patternMatch.Pattern.Replace("/my-tax/rebate", "/new-path/rebate")

我得到 /my-tax/new-path/rebate ,这是不正确的。

但是,如果我执行 -

new Regex(@"^.*?/rebate/?$").Replace("/my-tax/rebate", "/new-path/rebate"), 结果是正确的 - /new-path/rebate

为什么?

patternMatch是一个具有两个属性的对象 - 一个Pattern(正则表达式),另一个是TargetPath(替换字符串)。在这个例子中,我只使用了pattern属性。

关于调试的

patternMatch.Pattern

enter image description here

以下是运行时的结果 -

enter image description here

3 个答案:

答案 0 :(得分:1)

你错误地使用了这个功能。我不确定你是如何获得/my-tax/new-path/rebate因为它在ideone.com上给我一个错误(也许你有一个名为Pattern的正则表达式?)。

无论如何,使用这样的函数不应该有任何问题:

patternMatch.Replace("/my-tax/rebate", "/new-path/rebate");

ideone demo

答案 1 :(得分:0)

您问题中的一些要点不正确。正则表达式 正确替换。

Per @ XiaoguangQiao的评论,patternMatch.Pattern.Replace是什么?你的榜样......

var patternMatch = new Regex("^.*?/rebate/?$");
patternMatch.Pattern.Replace("/my-tax/rebate", "/new-path/rebate");

...错误消息......

  

'System.Text.RegularExpressions.Regex'不包含'Pattern'的定义,并且没有扩展方法'Pattern'接受类型'System.Text.RegularExpressions.Regex'的第一个参数可以找到

...当我把它扔进一个快速的LINQPad 4查询(设置为 C#Statement(s))时。

patternprivate string的{​​{1}} 字段;和System.Text.RegularExpressions.Regex - 我期望的是你的意思 - 产生正确的结果(patternMatch.Replace("/my-tax/rebate", "/new-path/rebate")),而不是你所说的错误结果("/new-path/rebate")。

否则您的模式(即有和没有@rene指出的额外"/my-tax/new-path/rebate")对于您最初的输入(/)和替换("/my-tax/rebate")是合适的大纲 - 只要它们匹配并产生你想要的结果。您可以在快速小提琴with the extra /without the extra /中查看代码外的内容。

答案 2 :(得分:-1)

使用String.Replace Method。

str.replace( “回扣”, “新路径/回扣”)

http://msdn.microsoft.com/en-us/library/fk49wtc1%28v=vs.110%29.aspx