-3

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

我必须使用正则表达式

例子:

输入:“ABCDZZ4321”

输出:“ABCD”

我想剪掉两个“Z”字符和最后的数字。

另一个例子:

输入:“ABCD4R4321”

输出:“ABCD”

4

7 回答 7

2

为什么要使用正则表达式:

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.

正则表达式现在已修复。据我所知..这将满足您的要求。

于 2013-10-10T07:55:29.120 回答
1

也许这样的事情会做?

^(\w+?)\w{2}\d+$

深入解释:

  • ^ = 匹配字符串的开头。
  • \w = 匹配任何非空白字符
  • \w+ = 匹配其中一项或多项
  • \w+? = 以“非贪婪”的方式匹配一个或多个(即让以下匹配尽可能多,这在这种情况下很重要)
  • \w{2} = 匹配两个非空白字符
  • \d+ = 匹配一个或多个数字字符
  • $ = 匹配字符串的结尾

(我在编写时使用这个站点来测试正则表达式。)

另外,如果只需要匹配AZ,可以将\w替换为[AZ];在这种情况下似乎更合适。

于 2013-10-10T08:01:40.083 回答
1

你可以使用^\w{3,}\d+$. 这将找到以至少 3 个字符开头的任何字符串(中间需要 2 个字符和 1 个字符以便返回一些内容)并以一组数字结尾。

于 2013-10-10T08:20:50.017 回答
1

您也可以使用此正则表达式:(.*?ZZ)然后删除 ZZ 或替换 whit ""

于 2013-10-10T08:23:08.133 回答
0

然后甚至像这样。

var input = "ABCDZZ4321";
var zzIndex = input.IndexOf("ZZ");
var output = input.Substring(0, zzIndex);

正则表达式在这里绝对是过度工程

Regex.Replace(input, @"^(.+)ZZ\d+$", "$1")

说明:字符串开头的所有内容都将被捕获在第 1 组(圆括号)中。在替换模式中,它将用“$1”引用。来自社区的 OP 问候你 ;)

于 2013-10-10T08:03:31.300 回答
0

另一种方法是使用 string.LastIndexOf()

string input = "ABCDZZ4321";
string splitOn = "ZZ";
string result = input.Substring(0, input.LastIndexOf(splitOn));
于 2013-10-10T08:04:14.757 回答
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;                
            }
于 2013-10-10T08:10:04.793 回答