我正在尝试使用正则表达式仅根据以下字符串选择粗体(减去 *)(回车在字符串中)。我要从中选择的每个字符串都以 ISA 开头。我一直在尝试使用它(?<=ISA\\*)(\w*)
,但是每当我开始在(?<...)
零件中添加要排除的其他字符时,我都找不到任何匹配项。
ISA*00* *00* *ZZ*某些字符串 *ZZ*99999999 *130605 * 2239*|*00501*000000001*0*P*>
编号*TJ*12345677*
编号*PQ*23432211
LX*1
以下应该有效:
^ISA(?:[^*]*[*][^*]*){8}\*(\d+)\*
见http://regex101.com/r/lU8sC8/1
它的工作方式:
^ISA — start of string has "ISA"
(?: — non-capturing group
[^*]*[*][^*]* — zero or more non-asterisks, followed by asterisk, followed by non-asterisk
{8} — eight of these
\* — one more asterisk
(\d+) — capture one or more digits
\* — followed by another asterisk
我不会使用 Regex 来解析 X12 EDI 文档。一个很好的起点将是这里
查看该链接,您会发现您的字段分隔符始终位于 ISA 行的位置 104,您的子分隔符始终位于 ISA 行的位置 105,而您的记录分隔符始终位于 106。(如果它们不是在那里,您没有有效的 X12)。
使用它,我会做这样的事情(如果您正在寻找 ISA 记录的第 7 字段):
var fieldDelimiter = line[103]; //where 'line' = your ISA Line, and remember 0 based index
var fieldSubDelim = line[104];
var recordDelimiter = line[105];
var fields = line.Split(fieldDelimiter);
var yourField = fields[7];
如果需要,这还允许您以类似的方式对其他记录进行排序。