C# 如何在已知长度内匹配字母和数字的精确组合?
我有一个导入客户数据的C#应用程序,我发现有一个用例很有挑战性。首先,以下是一些字符串示例:C# 如何在已知长度内匹配字母和数字的精确组合?,c#,regex,C#,Regex,我有一个导入客户数据的C#应用程序,我发现有一个用例很有挑战性。首先,以下是一些字符串示例: Z20Q M20A1070A20T M20A1070D03D0480A20B 我需要一个c#regex来提取以下模式中的任意一种,只要找到它们,其中L=字母和N=数字: LNNL或LNNLNNNN 您可以信赖以下几点: 模式不能重叠。找到匹配项后,提取该段,只查看尚未匹配的任何剩余字符串 字符串的每个字符都将匹配-不会丢弃任何字符 必须先尝试匹配LNNLNNNN,然后再尝试匹配LNNL。如果匹配了lnn
Z20Q
M20A1070A20T
M20A1070D03D0480A20B
我需要一个c#regex来提取以下模式中的任意一种,只要找到它们,其中L
=字母和N
=数字:
LNNL
或LNNLNNNN
您可以信赖以下几点:
LNNLNNNN
,然后再尝试匹配LNNL
。如果匹配了lnnnnn
,则提取它并继续尝试匹配字符串的剩余部分Z20Q
-我们完成了-如果是4个字符,我不需要正则表达式,我可以
抓住它走吧
M20A1070A20T
应生成并提取两个字符串:M20A1070
(匹配项
模式LNNLNNNN
)和A20T
(匹配模式LNNL
)
M20A1070D03D0480A20B应生成并提取3个字符串:M20A1070
(匹配模式LNNLNNNN
)和D03D0480
(匹配模式LNNLNNNN
)和
A20B
(匹配模式LNNL
)
我一直在学习,看^[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);
}
var input=“M20A1070D03D0480A20B”;
var regex=newregex(“[A-Z][0-9]{2}[A-Z]([0-9]{4}”);
foreach(regex.Matches(input.Cast().Select(x=>x.Value))中的变量匹配)
{
控制台写入线(匹配);
}
输出:
M20A1070
D03D0480
A20B
正则表达式基本上说匹配主模式,然后可选地匹配四位数字。因为正则表达式是贪婪的,所以如果存在四个额外的数字,它总是会占用它们
值得注意的是,这目前仅假设为大写字母(如您的示例中所示)。如果您需要不区分大小写的搜索,您需要稍微修改它。@ErikPhilips:Ah。我只是在上面评论了一下(现在删除了),想知道我是否错过了什么。我猜是你错过了什么工作完美。谢谢你,克里斯!