我是一个做C#的perl程序员.面对与零或多个断言有关的Regex.Replace的奇怪问题,*.
假设我想用一个字母替换零个或多个字母.在perl中,我可以这样做:
my $s = "A";
$s =~ s/\w*/B/;
print $s;
$s now = "B"
Run Code Online (Sandbox Code Playgroud)
但是如果我尝试在C#中做同样的事情,就像这样:
string s = Regex.Replace("A", @"\w*", "B");
s now = "BB"
Run Code Online (Sandbox Code Playgroud)
文档确实说"*字符在替换模式中不被识别为元字符"
为什么?如果你想要一些你的正则表达式在一些字符串上留下可能不存在的字符串(如末尾的".*?"),是否有任何解决方法?
(这是一个愚蠢的例子,但你明白了)
以 ^ 开始你的模式并以 $ 结束它,你的问题就解决了。
string s = Regex.Replace("AAAA", @"^\w*$", "B");
Console.Write(s);
Run Code Online (Sandbox Code Playgroud)
+或者 - 您可以使用运算符而不是运算符来停止匹配 0 长度字符串*:
string s = Regex.Replace("AAAA", @"\w+", "B");
Console.Write(s);
Run Code Online (Sandbox Code Playgroud)