用于提取字符串前缀的正则表达式

时间:2013-10-10 07:53:35

标签: c# .net regex

我需要一个c#正则表达式来提取字符串的前缀,后缀为2个字符和一个数字。

我必须使用REGEX

示例:

  

输入:“ABCDZZ4321”

     

输出:“ABCD”

我想剪切两个'Z'字符和最后的数字。

另一个例子:

  

输入:“ABCD4R4321”

     

输出:“ABCD”

7 个答案:

答案 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+$

深入解释:

  • ^ =匹配字符串的开头。
  • \ w =匹配任何非空白字符
  • \ w + =匹配这些
  • 中的一个或多个
  • \ 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;                
            }