C# 正则表达式替换和 *

标签 c# perl

我是一名 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/

相关文章:

javascript - 未捕获的语法错误 : Unexpected token &

c# - PreviewMouseDown 路由到边框/文本 block 而不是按钮

c# - RegularExpressions.Regex.IsMatch 挂起

c# - 测试多个标志值

perl - 在 Perl 单元测试期间更改环境变量

perl - 取消引用哈希值

c# - 正则表达式C#-匹配任何YouTube.com URI

python - bash + 如何从 rpm 捕获版本

perl - 为什么 Perl 在这里提示未终止的字符串?

mysql perl 占位符规则