正则表达式删除特定的重复字符

Dis*_*ile 10 c# regex

我想在C#中创建一个正则表达式,如果重复它就删除一个特定字符,因此它不是字符串的最后一个字符.

例:

"a--b-c-" => "a-b-c"
"-a-b--c" => "a-b-c"
"--a--b--c--" => "a-b-c"
Run Code Online (Sandbox Code Playgroud)

我从不想要 - 重复,我从不希望它成为我的字符串的第一个或最后一个字符.我怎么能写一个正则表达式来做这个?

Kei*_*thS 19

可能最容易分两步完成.首先用一个" - "替换一个或多个" - "的每个匹配项,然后修剪任何前导/尾随" - ".

var reducedString = Regex.Replace(inputString, "-+", "-");

var finalString = reducedString.Trim('-');
Run Code Online (Sandbox Code Playgroud)


Jus*_*ant 7

对于这个特定的问题,我可能不会使用正则表达式.相反,我可能会使用的组合String.SplitString.Join,这将是更简单,更快的可能性:

像这样:

string.Join("-", s.Split(new char[] {'-'}, StringSplitOptions.RemoveEmptyEntries));
Run Code Online (Sandbox Code Playgroud)

通过测试:

using System;
class Program
{
    static string RemoveDashes(string s)
    {
        return string.Join("-", s.Split(new char[] { '-' }, 
                            StringSplitOptions.RemoveEmptyEntries));
    }
    static void Main(string[] args)
    {
        Tuple<string, string>[] tests = new Tuple<string,string> [] 
        {
            new Tuple<string, string> ("a--b-c-", "a-b-c"),
            new Tuple<string, string> ("-a--b-c-", "a-b-c"),
            new Tuple<string, string> ("--a--b--c--", "a-b-c"),
        };
        foreach (var t in tests)
        {
            string s = RemoveDashes(t.Item1);
            Console.WriteLine("{3}: {0} => Expected: {1}, Actual: {2}", 
                        t.Item1, t.Item2, s, s == t.Item2 ? "PASS" : "FAIL");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)