在继续之前,我需要确保字段在C#
中使用Regex具有正确的语法。这是我的代码:
Description = 'AB1234567,AB3456789;AB2345678';
Regex reg = new Regex("(AB.{7},?)*;?(AB.{7},?)*");
Match match = reg.Match(Description);
if (!match.Success)
{
//code to raise error
}
所以,一些语法规则:
正确的例子:
- AB1234567,AB3456789;AB2345678
- AB1234567,AB3456789;
- AB1234567
- ;AB2345678,AB34567890
错误的例子:
- AB1234567,;AB2345678
- AB3456789;AB2345678,
我的正则表达式并不完整,但我无法想出如何考虑所有情况。这个问题的正确表达式是什么?
答案 0 :(得分:-1)
我认为你的表达几乎是正确的,你只需要确保另一个AB
组后面跟着一个逗号。您可以使用positive lookahead执行此操作,如下所示:
^(AB.{7}(,(?=AB))?)*;?(AB.{7}(,(?=AB))?)*$
您还需要输入开始和结束标记,否则您将获得多个子匹配。
此表达式与;AB2345678,AB34567890
样本不匹配,因为它在最后一组中有8位而不是7位
编辑:如果你想要一个漂亮的集合中的AB组,请尝试
^((?<left>AB.{7})(,(?=AB))?)*;?((?<right>AB.{7})(,(?=AB))?)*$
然后match.Groups["left"]?.Captures
和match.Groups["right"]?.Captures
将为您提供相应的匹配字符串(或null)。这称为命名捕获。