正则表达式将字符串拆分为 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])
详情
^
- 字符串开头
(?<Field>\d{2})
- 捕获组 "Field":两位数
(?<Value>\d{1,30})
- 捕获组 "Value":一到三十位数字
(?<FNC1>[\x00-\x1f\x80-\xFF])
- 捕获组 "FNC1":来自字符 class. 中指定范围的字符
我正在尝试在 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])
详情
^
- 字符串开头(?<Field>\d{2})
- 捕获组 "Field":两位数(?<Value>\d{1,30})
- 捕获组 "Value":一到三十位数字(?<FNC1>[\x00-\x1f\x80-\xFF])
- 捕获组 "FNC1":来自字符 class. 中指定范围的字符