使用正则表达式删除重复的字符

时间:2010-04-27 21:12:16

标签: .net regex

我需要使用正则表达式匹配*字符的第二次和后续出现。我实际上是使用Replace方法删除它们,所以这里有一些前后的例子:

test*     ->  test* (no change)
*test*    ->  *test
test** *e ->  test* e

是否可以使用正则表达式执行此操作? 感谢

3 个答案:

答案 0 :(得分:4)

如果.NET可以处理任意数量的外观,请尝试使用空字符串替换以下模式:

(?<=\*.*)\*

PS Home:\> 'test*','*test*','test** *e' -replace '(?<=\*.*)\*',''
test*
*test
test* e

另一种方式是这种模式:

(?<=\*.{0,100})\*

其中数字100可以替换为目标字符串的大小。

使用Mono 2.0测试以下内容:

using System;
using System.Text.RegularExpressions;

public class Test
{
    public static void Main()
    {
        Regex r = new Regex(@"(?<=\*.*)\*");
        Console.WriteLine("{0}", r.Replace("test*", ""));    
        Console.WriteLine("{0}", r.Replace("*test*", ""));    
        Console.WriteLine("{0}", r.Replace("test** *e", ""));                          
    }
}

还制作了:

test*
*test
test* e

答案 1 :(得分:0)

非最佳,但另一种方法。 记录第一个匹配项的索引,替换所有匹配项,并将第一个匹配项重新插入到recored index。

答案 2 :(得分:0)

$str =~ s/\*/MYSPECIAL/;  #only replace the first *
$str =~ s/\*//g;          #replace all *
$str =~ s/MYSPECIAL/\*/;  #put * back