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

Regex split string to char but with maximum size

我正在尝试在 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分频器。 我尝试使用正前瞻,但它只是从值组末尾开始匹配 30 位数字。

谁能告诉我应该寻找的方向?

编辑: 澄清一下: 该字段是我的字符串中的前 2 位数字,然后我有 1 到 30 位数字以 FNC1 符号终止(这里是 char 5,或者你可以说的任何不正常的东西)。如果值字符串为 33 位,则它不应与正则表达式中的值匹配。

所以这个不应该匹配:

var value = "921234567890123456789012345678901\u00053302123456";

而FNC1分频器后面的值是以下代码,在这个例子中是“3302123456”。那将是来自扫描的真实生活示例。

您可以使用

^(?<Field>\d{2})(?<Value>\d{1,30})(?<FNC1>[\x00-\x1f\x80-\xFF])

regex demo

详情

  • ^ - 字符串开头
  • (?<Field>\d{2}) - 捕获组 "Field":两位数
  • (?<Value>\d{1,30}) - 捕获组 "Value":一到三十位数字
  • (?<FNC1>[\x00-\x1f\x80-\xFF]) - 捕获组 "FNC1":来自字符 class.
  • 中指定范围的字符