我需要一个c#正则表达式来提取字符串的前缀,后缀为2个字符和一个数字。
我必须使用REGEX
示例:
输入:“ABCDZZ4321”
输出:“ABCD”
我想剪切两个'Z'字符和最后的数字。
另一个例子:
输入:“ABCD4R4321”
输出:“ABCD”
答案 0 :(得分:2)
为什么要打扰Regex:
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.
现在正在修复正则表达式。据我所知,这将符合您的要求。
答案 1 :(得分:1)
也许这样的事情可以吗?
^(\w+?)\w{2}\d+$
深入解释:
(我在编写时使用this site来测试正则表达式。)
此外,如果您只需要匹配A-Z,则可以用[A-Z]替换\ w;在这种情况下似乎更合适。
答案 2 :(得分:1)
您可以使用^\w{3,}\d+$
。这将找到任何以至少3个字符开头的字符串(中间需要2个字符串,1个字符串,以便返回),并以一组数字结束。
答案 3 :(得分:1)
您也可以使用此正则表达式:(.*?ZZ)
然后删除ZZ或替换为“”
答案 4 :(得分:0)
然后就是这样。
var input = "ABCDZZ4321";
var zzIndex = input.IndexOf("ZZ");
var output = input.Substring(0, zzIndex);
正则表达式绝对是一个过度工程
Regex.Replace(input, @"^(.+)ZZ\d+$", "$1")
说明: 所有来自字符串开头的内容都将在第1组(圆括号)中捕获。在替换模式中,它将以'$ 1'引用。 向社区问候OP;)
答案 5 :(得分:0)
另一种方法是使用string.LastIndexOf()
string input = "ABCDZZ4321";
string splitOn = "ZZ";
string result = input.Substring(0, input.LastIndexOf(splitOn));
答案 6 :(得分:0)
请尝试以下代码。我在下面的代码中尝试使用“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;
}