我想在字母出现之前删除字符或字符串。
例如考虑
“ - Test-T1”,“--- Test-T2”,“---- Test-T3”。
在上面的字符串中,我想在字母表开始之前删除连字符,并希望在此之后保留连字符。我尝试了substring,删除了LastIndexOf()+1
,Regex.Replace
,但没有一个可行。请指导我如何实现它。
答案 0 :(得分: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字母。