正则表达式将字符串拆分为char但具有最大大小

时间:2018-06-26 10:03:58

标签: c# regex c#-4.0

我正在尝试在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”。从扫描来看,这将是一个真实的例子。

1 个答案:

答案 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”:字符类中指定范围内的字符。