1

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

2 回答 2

0

您的@".*[a-zA-Z]{2}$"正则表达式匹配除换行符(尽可能多)和字符串末尾的 2 个 ASCII 字母以外的任何 0+ 个字符。您不检查上下文,因此无论前面的内容如何,​​这两个字母都会匹配。

您需要一个正则表达式来匹配前面没有字母的最后两个字母:

(?<!\p{L})\p{L}{2}$

请参阅此正则表达式演示

详情

  • (?<!\p{L})\p{L}- 如果在当前位置之前找到一个字母 ( ),则匹配失败([a-zA-Z]如果您只想处理 ASCII 字母,则可以使用)
  • \p{L}{2}- 2 个字母
  • $- 字符串结束。

在 C# 中,使用

var result = Regex.Replace(mystring, @"(?<!\p{L})\p{L}{2}$", string.Empty);
于 2016-07-28T11:17:09.230 回答
0

如果您要删除最后两个字母,您可以简单地执行以下操作:

string result = Regex.Replace(originalString, @"[A-Za-z]{2}$", string.Empty);

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

于 2016-07-28T11:25:10.230 回答