我是一个做C#的perl程序员.面对与零或多个断言有关的
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);