我正在尝试进行一些正则表达式匹配和替换,但由于某些原因,替换在.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
是
以下是运行时的结果 -
答案 0 :(得分:1)
你错误地使用了这个功能。我不确定你是如何获得/my-tax/new-path/rebate
因为它在ideone.com上给我一个错误(也许你有一个名为Pattern
的正则表达式?)。
无论如何,使用这样的函数不应该有任何问题:
patternMatch.Replace("/my-tax/rebate", "/new-path/rebate");
答案 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))时。
pattern
是private 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