我是一名 perl 程序员,正在使用一些 C#。面对 Regex.Replace 关于零或多个断言的奇怪问题,*。
假设我想用一个字母替换零个或多个字母。在 perl 中,我可以这样做:
my $s = "A";
$s =~ s/\w*/B/;
print $s;
$s now = "B"
但是如果我尝试在 C# 中做同样的事情,就像这样:
string s = Regex.Replace("A", @"\w*", "B");
s now = "BB"
文档确实说“* 字符未被识别为替换模式中的元字符”
为什么?如果你想让你的正则表达式吞噬一些可能不存在的遗留字符串(比如最后的“.*?”),是否有任何解决方法
(这是一个愚蠢的例子,但你明白了)
最佳答案
以 ^ 开始你的模式并以 $ 结束它,你的问题就解决了。
string s = Regex.Replace("AAAA", @"^\w*$", "B");
Console.Write(s);
或者 - 您可以使用 +
运算符而不是 *
运算符来停止对 0 长度字符串的匹配:
string s = Regex.Replace("AAAA", @"\w+", "B");
Console.Write(s);
关于C# 正则表达式替换和 *,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9227438/