我需要 ac# 正则表达式来提取具有 2 个字符和一个数字的后缀的字符串的前缀。
我必须使用正则表达式
例子:
输入:“ABCDZZ4321”
输出:“ABCD”
我想剪掉两个“Z”字符和最后的数字。
另一个例子:
输入:“ABCD4R4321”
输出:“ABCD”
为什么要使用正则表达式:
var result = "ABCDZZ4321".Split('Z')[0];
编辑:
正则表达式版本..即使它非常矫枉过正:
var match = Regex.Match("ABCDZZ4321", @"^(\w+?)([A-Z0-9]{2})(\d+)$");
var result = match.Groups[1].Value; // 1 is the group.. 0 is the whole thing.
正则表达式现在已修复。据我所知..这将满足您的要求。
也许这样的事情会做?
^(\w+?)\w{2}\d+$
深入解释:
(我在编写时使用这个站点来测试正则表达式。)
另外,如果只需要匹配AZ,可以将\w替换为[AZ];在这种情况下似乎更合适。
你可以使用^\w{3,}\d+$
. 这将找到以至少 3 个字符开头的任何字符串(中间需要 2 个字符和 1 个字符以便返回一些内容)并以一组数字结尾。
您也可以使用此正则表达式:(.*?ZZ)
然后删除 ZZ 或替换 whit ""
然后甚至像这样。
var input = "ABCDZZ4321";
var zzIndex = input.IndexOf("ZZ");
var output = input.Substring(0, zzIndex);
正则表达式在这里绝对是过度工程
Regex.Replace(input, @"^(.+)ZZ\d+$", "$1")
说明:字符串开头的所有内容都将被捕获在第 1 组(圆括号)中。在替换模式中,它将用“$1”引用。来自社区的 OP 问候你 ;)
另一种方法是使用 string.LastIndexOf()
string input = "ABCDZZ4321";
string splitOn = "ZZ";
string result = input.Substring(0, input.LastIndexOf(splitOn));
请尝试以下代码。我在下面的代码中尝试了“ABCDZZ4321”和长输入字符串。在这两个测试中,它都给出了所需的结果“ABCD”。
string input = "ABCDZZ455555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555321";
Regex rgx = new Regex("(?<content>.*?)[a-zA-Z]{2}[0-9]+");
Match MatchResult = rgx.Match(input);
string result = string.Empty;
while (MatchResult.Success)
{
result = MatchResult.Groups["content"].Value;
break;
}