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