这是我的模式。它似乎没有起作用。我基本上看色码是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
由于
答案 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 ; viewcode
和colorcode
组分组为非捕获组。
为了匹配没有颜色代码和视图代码的条目,我制作了整个&#34;容器&#34;通过添加?
量词来选择非捕获组。