我有一般形式的项目编号: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.这不会产生预期的结果结果。有人能告诉我哪里出错了吗?
答案 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。