c#正则表达式捕获捕获的组后的单词

时间:2016-11-24 14:16:09

标签: c# regex

我有一般形式的项目编号:1-3个数字后跟可选的小写字符,后跟可选的单个数字,后跟一个单词,后跟可选的单个数字。 例如,以下所有内容都是合法的商品编号:"21aRepair", "04iMod2", "04d1RR", "5", "07", "8a", "09b", "04g3"

我需要将这些项目编号分解为表单的组件: 组件1)1-3个数字后跟可选的小写字符,后跟可选的单个数字 组成部分2)一个字 组件3)可选的单个数字

例如:

"21aRepair"应该成为"21a", "Repair", null

"04iMod2"应该成为"04i", "Mod", "2"

"04d1RR"应该成为"04d1", "RR", null

"5"应该成为"5", null, null

我有以下regex: (^\d{1,3}[a-z]?\d?)适用于组件1.我已经为组件2尝试了几个选项但没有成功。

我认为如下:(?<=^\d{1,3}[a-z]?\d?)([a-zA-Z]*\d?)会起作用。将lookbehind "(?<="添加到组件1模式应该说&#34;采取组件1和#34;之后的任何内容,组([a-zA-Z]*\d?)应该匹配组件2和3.这不会产生预期的结果结果。有人能告诉我哪里出错了吗?

1 个答案:

答案 0 :(得分:3)

您可以考虑使用

^(\d{1,3}[a-z]?\d?)([a-zA-Z]*)(\d?)$

请参阅regex demo

<强>详情:

  • ^ - 字符串开头
  • (\d{1,3}[a-z]?\d?) - 第1组:组件,1到3位数字,可选的小写ASCII字母和可选数字
  • ([a-zA-Z]*) - 第2组:单词,零个或多个ASCII字母
  • (\d?) - 第3组:可选数字
  • $ - 字符串结尾

在C#中,使用

var m = Regex.Match(str, @"^(\d{1,3}[a-z]?\d?)([a-zA-Z]*)(\d?)$");

检查m.Success 是否,并使用m.Groups[n].Value访问这三个组,其中n是组ID。