Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.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#_C# - Fatal编程技术网

查找并替换为正则表达式C#

查找并替换为正则表达式C#,c#,C#,将输出获取为17/17o17u17t17g17o17i17n17g17 为什么上面的find和replace失败了,它应该什么都不做,而是在每个空间填充replace变量。它甚至需要正则表达式吗?你知道在|d |中|的意思是或?试着逃避它@“\\\\\\” 您的正则表达式相当于”(空字符串) 这是因为你必须把它看作 string subject = "/testfolder subject = Regex.Replace(subject, "|d|", "17"); Co

将输出获取为17/17o17u17t17g17o17i17n17g17


为什么上面的find和replace失败了,它应该什么都不做,而是在每个空间填充replace变量。它甚至需要正则表达式吗?

你知道在
|d |
|
的意思是
?试着逃避它<代码>@“\\\\\\”

您的正则表达式相当于
(空字符串)

这是因为你必须把它看作

    string subject = "/testfolder
    subject = Regex.Replace(subject, "|d|", "17");
    Console.Write(subject);
始终从左到右匹配,在第一个正匹配处停止。正如我们将看到的,只有第一个条件(空字符串的匹配)在任何地方都是正的,因此它永远不会转到其他匹配

现在,正则表达式解析器将尝试在字符串的开头匹配正则表达式

它位于“/”(第一个字符):匹配吗?
”/“
的一部分吗?是的(至少在正则表达式解析器的“头脑”中是这样)。现在有趣的是,
Regex.Replace
将用
17
替换字符串的匹配部分。。。但有趣的是,
“/”
的匹配部分是
,因此它将用
“17”
替换
“/”
前面的一个虚构空字符串。因此它将成为
“17/”

现在它将转到下一个字符(因为通常会从上一个匹配结束时开始尝试正则表达式,但下面会写一条警告),
t
,重做相同的操作,并将其替换为
“17t”
,因此我们现在有:

(match of empty string) or (match of letter d) or (match of empty string)
等等

还有最后一个小把戏(摘自)

当通过调用Matches方法重复匹配尝试时,正则表达式引擎将对空匹配进行特殊处理。通常,正则表达式引擎会在上一个匹配结束的地方开始搜索下一个匹配。但是,在空匹配之后,正则表达式引擎在尝试下一个匹配之前前进一个字符


我的意思是字符串中会有| d |,而不是他说你需要转义|字符,这样代码才能正确解释它。@LukeMakk我知道。使用我写的。@LukeMakk如果你愿意,我甚至可以解释你的正则表达式做了什么:-)
17/17t