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

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

例:

"a--bc-" => "abc" "-ab--c" => "abc" "--a--b--c--" => "abc" 

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

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

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

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

像这样:

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

通过测试:

 using System; class Program { static string RemoveDashes(string s) { return string.Join("-", s.Split(new char[] { '-' }, StringSplitOptions.RemoveEmptyEntries)); } static void Main(string[] args) { Tuple[] tests = new Tuple [] { new Tuple ("a--bc-", "abc"), new Tuple ("-a--bc-", "abc"), new Tuple ("--a--b--c--", "abc"), }; 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"); } } } 
 string tidyText = Regex.Replace(originalText, "^-+|(?<=-)-+|-+$", ""); 

我知道你要求Regex,但是第二个你必须改变或重新阅读的代码,大多数人只是重写它,因为它比重新学习代码所做的更快。 使用内置字符串方法的2行将比重新读取未来的正则表达式简单得多。 在某些情况下它更快。

  string text = "--ab--c-"; text = text.Replace( "--", "-" ); text = text.Trim( '-' ); 

没有正则表达式,这可能更容易实现。 类似以下内容(未经测试):

 string s = "--a--b--c--"; string t = ""; bool atStart = true; bool inHyphen = false; foreach (char c in s) { if (c != "-") { if (atStart) { atStart = false; } else if (inHyphen) { inHyphen = false; t += "-"; } t += c; } else { inHyphen = true; } }