簡體   English   中英

正則表達式匹配,但不包括

[英]Regular Expression match but not include

我正在嘗試使用正則表達式僅根據以下字符串(回車符在字符串中)選擇粗體(減去*)。 我要從中選擇的每個字符串都以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

如果數字介於第9號和第10號之間,則可以使用:

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

如本所示

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

如果需要,這還允許您以類似的方式對其他記錄進行排序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM