从不以其他字母开头的字符串中删除 2 个尾随字母的正则表达式
Regex that removes the 2 trailing letters from a string not preceded with other letters
这是在 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# 中,所以我总是 return 一个字符串,删除两个尾随字母(如果它们确实存在并且前面没有另一个字母)。
Match result = Regex.Match(mystring, pattern);
return result.Value;
您的 @".*[a-zA-Z]{2}$"
正则表达式匹配除换行符(尽可能多)以外的任何 0+ 个字符和字符串末尾的 2 个 ASCII 字母。您不检查上下文,因此无论前面是什么,这 2 个字母都是匹配的。
您需要一个正则表达式来匹配前面没有字母的最后两个字母:
(?<!\p{L})\p{L}{2}$
详情:
(?<!\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);
请记住,在正则表达式中,$
表示输入的结尾或换行符之前的字符串。
这是在 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# 中,所以我总是 return 一个字符串,删除两个尾随字母(如果它们确实存在并且前面没有另一个字母)。
Match result = Regex.Match(mystring, pattern);
return result.Value;
您的 @".*[a-zA-Z]{2}$"
正则表达式匹配除换行符(尽可能多)以外的任何 0+ 个字符和字符串末尾的 2 个 ASCII 字母。您不检查上下文,因此无论前面是什么,这 2 个字母都是匹配的。
您需要一个正则表达式来匹配前面没有字母的最后两个字母:
(?<!\p{L})\p{L}{2}$
详情:
(?<!\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);
请记住,在正则表达式中,$
表示输入的结尾或换行符之前的字符串。