正则表达式从字符串中删除2个尾随字母,而不是其他字母

时间:2016-07-28 11:15:26

标签: c# regex letter trailing

这是在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;

2 个答案:

答案 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);

请记住,在正则表达式中$表示输入的结尾或换行符之前的字符串。