C#正则表达式替换和*我是一个perl程序员,在做C#。面对Regex.Replace与零个或多个断言相关的奇怪问题,*。假设我想用一个字母替换零个或多个字母。在perl中,我可以这样做:my$s="A";$s=~s/w*/B/;打印$s;$snow="B"但如果我尝试在C#中做同样的事情,就像这样:strings=Regex.Replace("A",@"w*","B");snow="BB"文档确实说“*字符未被识别为替换模式字符中的元数据”为什么?如果您希望某些正则表达式保留某些字符串中可能不存在的字符串(例如末尾的“.*?”),是否有任何解决方法?(这是一个愚蠢的例子,但你明白了)以^开始你的模式,以$结束它,你的问题就解决了。strings=Regex.Replace("AAAA",@"^w*$","B");控制台.写(s);或者-您可以使用+运算符而不是*运算符来停止匹配长度为0的字符串:strings=Regex.Replace("AAAA",@"w+","B");控制台.写(s);MattFellows对如何修复它有正确的答案。我确定我可以尝试解释为什么它会这样中断......考虑一下:Regex.Replace("AAA",@"Z*","!!!|$&|")它会返回:!!!||A!!!||A!!!||A!!!||在这种情况下,Z*将匹配一系列零长度字符串,每个字符串前面或后面都有一个A字符。$&放入匹配的字符串,在本例中我们可以看到它是空的。我相信像Regex.Replace("AAA",@"A*","!!!|$&|")这样的东西会返回!!!|AAA|!!!||A*从头开始??匹配,匹配“AAA”。然后匹配“”并停止。我不确定在这种情况下这是否是所需的行为,但我怀疑这是A*匹配零长度字符串的方式的必然副作用。当然,当您将模式更改为^A*$时,锚定意味着只有一个可能的匹配项,在这种情况下更符合预期。以上就是C#学习教程的全部内容:C#正则表达式替换与*分享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。涉及侵权,请点击维权联系管理员删除。如需转载请注明出处:
