正则表达式匹配但不包含

本文关键字:包含 正则表达式 | 更新日期: 2023-09-27 18:37:27

我正在尝试使用正则表达式仅根据以下字符串选择粗体(减去*)(回车符在字符串中)。 我想从中选择它的每个字符串都以 ISA 开头。 (?<=ISA''*)('w*),我一直在尝试使用它,但是每当我开始添加要排除(?<...)部分中的其他字符时,我都不再找到任何匹配项。

ISA*00* *00* *ZZ*SOME STRING *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
如果是介于

第 9 和第 10 个星号之间的数字,则可以使用:

ISA(?:[^*]*'*){9}('d+)'*

如本标题所示

我不会使用正则表达式来解析 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];
如果需要

,这也允许您以类似的方式对其他记录进行排序。