我想在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)
对于这个特定的问题,我可能不会使用正则表达式.相反,我可能会使用的组合String.Split和String.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)
| 归档时间: |
|
| 查看次数: |
6607 次 |
| 最近记录: |