2017-04-11 188 views
1

我想在字母出现之前删除字符或字符串。删除字母之前的字符串

例如考虑

“ - 测试-T1”, “---测试-T2”, “----测试-T3”。

在上面的字符串中,我想在字母表开始之前删除连字符,并希望在此之后保留连字符。我试过子串,删除LastIndexOf()+1Regex.Replace但没有工作。请指导我如何实现它。

+0

'“--Test-T1”.TrimStart(' - ')'? ' - 1Test-Test - '应该是什么行为? “但没有工作” - 为什么?你试过什么正则表达式? –

+0

@WiktorStribiżew它的工作..!先生非常感谢您。如果我想在中间不是在开始时删除连字符,是否有可能实现? – user777

+0

什么是测试样本/预期结果?在中间 - 它是不是最后? '--1-2--3-' - > ?? –

回答

4

如果你想只从一个字符串的开始删除-符号,仅仅

var res = s.TrimStart('-'); 

会做。如果你需要确保有领先的连字符后的字母,使用正则表达式:

var res = Regex.Replace(s, @"^-+(?=[a-zA-Z])", ""); 

这里,

  • ^ - 断言在字符串位置开始
  • -+ - 比赛和消耗1+连字符
  • (?=[a-zA-Z]) - 正向查找检查连字符后是否有ASCII字母(但不会消耗字母,它不是匹配值的一部分)。

另外,使用捕获组基于版本:

var res = Regex.Replace(s, @"^-+([a-zA-Z])", "$1"); 

这里,信被消耗,但由于我们捕获它,$1在结果恢复它。

请注意,[a-zA-Z]可以替换为\p{L}以匹配任何Unicode字母。