C#正则表达式模式不起作用

时间:2016-08-08 16:06:32

标签: regex c#-4.0

这是我的模式。它似乎没有起作用。我基本上看色码是2到3个字母数字。但这似乎并没有起作用。

^(?<productno>\d{6})\s(?<mattype>\w+).*?(\s)?((?<colorcode>[A-Z0-9]{3})|(?<viewcode>\(view\d+\))*)(?:_[A-Z])?$

结果:

123456 STLI Ocean EHC_Q 
colorcode: EHC is valid
123456 STLI Ocean EHCD_Q 
colorcode: HCD is invalid

任何人都可以帮助我如何使其工作,以便颜色代码应该是2到3个字母数字?

有效测试数据:

123456 STLI_Q
123456 STLI Ocean EHC_Q
123456 STLI White WE_Q
123456 FMV SPIN FUCHSIA 2YP
123456 STLI (view002)_Q
123456 STL AQUA WBP

由于

1 个答案:

答案 0 :(得分:1)

我认为你可以使用

^(?<productno>\d{6})\s(?<mattype>\w+).*?\s*(?:(?<viewcode>\(view\d+\))|(?<colorcode>\b[A-Z0-9]{2,3}))?(?:_[A-Z])?$

请参阅regex demo

主要变化是我在\b模式的开头添加了单词边界colorcode,并将限制量词更改为{2,3}以匹配2或3个大写ASCII字母或位数。

我还删除了一些捕获组((\s)?&gt; \s*,如果可以有一个或零个空格,您可以使用\s?并转换&#34;容器&#34 ; viewcodecolorcode组分组为非捕获组。

为了匹配没有颜色代码和视图代码的条目,我制作了整个&#34;容器&#34;通过添加?量词来选择非捕获组。

enter image description here