我正在尝试在C#中构建一个正则表达式,以将扫描的条形码与组(GS1代码)匹配。 因此,每个字段都有一个正则表达式来剪切流,但是FNC1字符是字段的结尾,值前1到30位是数字,但前2位是应用程序标识符。
简单示例:
var value = "9212345678\u00053302123456";
var regex = "((?<Field>([\d]{2}))(?<Value>(\d{1,30}$)).*?)(?<FNC1>[\x00-\x1f\x80-\xFF])";
Result:
Field -> 92
Value -> 12345678
FNC1 -> (char) 5
但是,当值的大小大于30位时,它仍然匹配,但不匹配FNC1分频器。 我尝试使用正向前瞻,但它只是将Value Group末尾的30个数字相匹配。
有人可以给我我应该寻找的方向吗?
编辑: 要澄清一下: 该字段是我字符串中的前2位,然后我有1到30位以FNC1符号终止(此处为char 5,或者您可以说的任何不正常的数字)。如果值字符串是33位数字,则它不应与正则表达式中的值匹配。
所以这个不应该匹配:
var value = "921234567890123456789012345678901\u00053302123456";
FNC1分频器后面的值是以下代码,在此示例中为“ 3302123456”。从扫描来看,这将是一个真实的例子。
答案 0 :(得分:1)
您可以使用
^(?<Field>\d{2})(?<Value>\d{1,30})(?<FNC1>[\x00-\x1f\x80-\xFF])
请参见regex demo
详细信息
^
-字符串的开头(?<Field>\d{2})
-捕获组“字段”:两位数字(?<Value>\d{1,30})
-捕获组“值”:1到30位数字(?<FNC1>[\x00-\x1f\x80-\xFF])
-捕获组“ FNC1”:字符类中指定范围内的字符。