Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .Net正则表达式未正确替换 出身背景_C#_Regex - Fatal编程技术网

C# .Net正则表达式未正确替换 出身背景

C# .Net正则表达式未正确替换 出身背景,c#,regex,C#,Regex,我正在尝试进行一些正则表达式匹配和替换,但由于某些原因,替换在.NET中是不正确的 正则表达式模式-^.*?/折扣/$ 输入字符串-/my tax/Retriep 替换字符串-/新路径/折扣 基本上,如果在字符串中看到“retrieve”一词,则需要将输入字符串完全替换为替换字符串 问题 如果我用模式创建一个正则表达式并执行 patternMatch.Pattern.Replace("/my-tax/rebate", "/new-path/rebate") 我得到/我的税/新路径/退税,这是不

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

正则表达式模式-^.*?/折扣/$

输入字符串-/my tax/Retriep

替换字符串-/新路径/折扣

基本上,如果在字符串中看到“retrieve”一词,则需要将输入字符串完全替换为替换字符串

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

patternMatch.Pattern.Replace("/my-tax/rebate", "/new-path/rebate")
我得到/我的税/新路径/退税,这是不正确的

但是,如果我执行-

新的正则表达式@^.*?/retail/?$。替换/my tax/retail,/new path/retail, 结果是正确的-/新路径/折扣

为什么呢

patternMatch是一个具有两个属性的对象—一个是Regex模式的模式,另一个是TargetPath,它是替换字符串。在本例中,我只使用pattern属性

patternMatch。调试时的模式为

以下是运行时的结果-


您只是错误地使用了该函数。我不确定您是如何获得/my tax/new path/退税的,因为它在ideone.com上给了我一个错误,也许您有一个名为Pattern?的正则表达式

不管怎样,使用这样的函数不应该有任何问题:

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

你问题中有几点是不正确的。正则表达式正在正确替换


根据@Xiaogangqiao的评论,patternMatch.Pattern.Replace是什么?你的例子

var patternMatch = new Regex("^.*?/rebate/?$");
patternMatch.Pattern.Replace("/my-tax/rebate", "/new-path/rebate");
…消息中出现错误

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

…当我将它放入一个设置为C语句的快速LINQPad 4查询集中时

模式是System.Text.RegularExpressions.Regex的私有字符串字段;和patternMatch.Replace/my-tax/retain,/new path/retain-我希望这就是你的意思-生成正确的结果/新路径/retain,而不是你说得到的不正确的结果/我的税/新路径/retain


否则,您的模式,即@rene指出的有/无额外/对您最初概述的输入/我的税/退税和替换/新路径/退税都是合适的-只要它们匹配并产生您想要的结果。您可以在代码之外的快速小提琴中检查此问题。

使用String.Replace方法

str.replaceRetrieve,新路径/回扣


什么是patternMatch.Pattern.Replace?它是公共API吗?它是System.Text.RegularExpressions的函数。公共字符串替换字符串输入,字符串替换有效的正则表达式与无效的正则表达式不同。您在末尾有一个额外的/是否正确?如果在字符串中看到“retrieve”一词,则输入字符串需要完全替换为替换字符串,这是什么意思?因此xxxx/xxxx/返利将变成/new path/retain?@NomadTraveler compare^.*./返利/?$与@^.*./返利?$并计算/您看到的数量…两个问题:1 str.替换而不是str.替换2不管怎样,这都会产生错误的结果-/my tax/新路径/返利,如var str=/my tax/retain所示;Console.WriteLinestr.replaceRetrieve,新路径/返利;。patternMatch.Pattern是正则表达式对象名。请检查问题中所附的图片。@NomadTraveler:句点在C变量名中是不合法的-只有下划线、字母和数字。不管怎样,您基本上会有patternMatch.Replace/my-tax/retain、/new path/retain,它可以使用不同的变量名—这是一个无关紧要的区别。我的错。它不是对象名。patternMatch是一个具有两个属性的对象—一个是Regex模式的模式,另一个是TargetPath,它是替换字符串。在本例中,我只使用pattern属性。为所有的困惑道歉。@NomadTraveler您是如何生成patternMatch.Pattern的?你能再多看一点代码吗?多贴一点信息@jerry@NomadTraveler如果可以问的话,你是在什么软件中这样做的?@NomadTraveler我不是指语言。我是说,像Visual Studio?在运行时和调试跟踪期间,从何处获得这些结果?