Regex,从没有其他字母开头的字符串中删除2个尾随字母

本文关键字:字符串 删除 2个 开头 其他 Regex | 更新日期: 2023-09-27 17:59:00

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

Regex,从没有其他字母开头的字符串中删除2个尾随字母

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

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

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

请参阅此regex演示。

详细信息

  • (?<!'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);

如果你想删除最后两个字母,你可以简单地这样做:

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

请记住,在regex中,$表示输入的末尾或换行之前的字符串。