1

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

ISA*00* *00* *ZZ*某些字符串 *ZZ*99999999 *130605 * 2239*|*00501*000000001*0*P*>

编号*TJ*​​12345677*

编号*PQ*23432211

LX*1

4

3 回答 3

6

以下应该有效:

^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
于 2013-10-29T22:14:44.047 回答
2

如果它是第 9 和第 10 个星号之间的数字,那么您可以使用:

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

如这个rubular所示

于 2013-10-29T22:12:07.283 回答
1

我不会使用 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];

如果需要,这还允许您以类似的方式对其他记录进行排序。

于 2013-10-29T22:14:31.073 回答