删除字母之前的字符串
问题描述:
我想在字母出现之前删除字符或字符串。删除字母之前的字符串
例如考虑
“ - 测试-T1”, “---测试-T2”, “----测试-T3”。
在上面的字符串中,我想在字母表开始之前删除连字符,并希望在此之后保留连字符。我试过子串,删除LastIndexOf()+1
,Regex.Replace
但没有工作。请指导我如何实现它。
答
如果你想只从一个字符串的开始删除-
符号,仅仅
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字母。
'“--Test-T1”.TrimStart(' - ')'? ' - 1Test-Test - '应该是什么行为? “但没有工作” - 为什么?你试过什么正则表达式? –
@WiktorStribiżew它的工作..!先生非常感谢您。如果我想在中间不是在开始时删除连字符,是否有可能实现? – user777
什么是测试样本/预期结果?在中间 - 它是不是最后? '--1-2--3-' - > ?? –