gpt4 book ai didi

c# - 如何在已知长度内精确匹配字母和数字的组合?

转载 作者:行者123 更新时间:2023-12-02 13:37:09 25 4
gpt4 key购买 nike

我有一个导入客户数据的 C# 应用程序,我发现一个用例具有挑战性。首先,这里是一些字符串示例:

Z20Q

M20A1070A20T

M20A1070D03D0480A20B

我需要一个 C# 正则表达式来提取以下任一模式(只要发现它们),其中 L=Letter 和 N=Number:

LNNLLNNLNNNN

您可以信赖以下内容:

  1. 模式不能重叠。找到匹配项后,提取该段,并仅查看尚未匹配的任何剩余字符串。
  2. 字符串中的每个字符都会匹配 - 不会丢弃任何字符。
  3. 在尝试匹配 LNNL 之前,必须先尝试匹配 LNNLNNNN。如果 LNNLNNNN 匹配,则将其提取并继续尝试匹配字符串的其余部分。
  4. 这些图案的长度和位置都很精确,而且可以信赖。但正如您从我的示例字符串中看到的,字符串的长度可能会有所不同。
  5. 每个提取/匹配的字符串必须恰好为 4 个字符或恰好为 8 个字符。
  6. 每个字符串的字符数将是 4 的精确倍数:4、8、12、16、20(我认为不会超过 20)
  7. 字符串将完全由字母数字字符组成 - 没有空格或特殊字符 - 只有字母和数字

让我们逐步介绍一些:

Z20Q - we're done - if it's 4 characters I don't need regex, I can grab it and go.

M20A1070A20T should produce and extract 2 strings: M20A1070 (matches pattern LNNLNNNN) and A20T (matches pattern LNNL)

M20A1070D03D0480A20B should produce and extract 3 strings: M20A1070 (matches pattern LNNLNNNN) and D03D0480 (matches pattern LNNLNNNN) and A20B (matches pattern LNNL)

我一直在学习this stack post ,看看 ^[G][0-9]{1,5}?$|^[G][0-9]{4}[A-Z]?$ - 这似乎是一个有前途的开始,但我的正则表达式功夫很弱,我非常感谢一些建议。

最佳答案

以下内容应该满足您的要求:

var input = "M20A1070D03D0480A20B";
var regex = new Regex("[A-Z][0-9]{2}[A-Z]([0-9]{4})?");

foreach(var match in regex.Matches(input).Cast<Match>().Select(x=>x.Value))
{
Console.WriteLine(match);
}

输出:

M20A1070
D03D0480
A20B

正则表达式基本上表示匹配主要模式,然后也可以选择匹配四位数字。因为正则表达式是贪婪的,所以它总是会获取四个额外的数字(如果存在)。

值得注意的是,目前仅假定大写字母(如您的示例中所示)。如果您需要不区分大小写的搜索,则需要稍微修改它。

关于c# - 如何在已知长度内精确匹配字母和数字的组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55008848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com