这是在C#中。到目前为止,我一直在烦恼,但没有运气。
所以例如
123456BVC --> 123456BVC (keep the same)
123456BV --> 123456 (remove trailing letters)
12345V -- > 12345V (keep the same)
12345 --> 12345 (keep the same)
ABC123AB --> ABC123 (remove trailing letters)
它可以从任何事情开始。
我试过@".*[a-zA-Z]{2}$"
但没有运气
这是在C#中,所以我总是返回一个字符串,如果它们存在并且前面没有另一个字母,则删除两个尾随字母。
Match result = Regex.Match(mystring, pattern);
return result.Value;
答案 0 :(得分:0)
您的@".*[a-zA-Z]{2}$"
正则表达式匹配除换行符之外的任何0+个字符(尽可能多)和字符串末尾的2个ASCII字母。您不检查上下文,因此无论前面的内容是什么,都会匹配2个字母。
你需要一个与之前没有字母的最后两个字母相匹配的正则表达式:
(?<!\p{L})\p{L}{2}$
请参阅this regex demo。
<强>详情:
(?<!\p{L})
- 如果在当前位置之前找到一个字母(\p{L}
),则匹配失败(如果您只想处理ASCII字母,可以使用[a-zA-Z]
)\p{L}{2}
- 2个字母$
- 字符串结束。在C#中,使用
var result = Regex.Replace(mystring, @"(?<!\p{L})\p{L}{2}$", string.Empty);
答案 1 :(得分:0)
如果您要删除最后两个字母,可以直接执行此操作:
string result = Regex.Replace(originalString, @"[A-Za-z]{2}$", string.Empty);
请记住,在正则表达式中$
表示输入的结尾或换行符之前的字符串。