C# 850 EDI文件的正则表达式

C# 850 EDI文件的正则表达式,c#,regex,edi,C#,Regex,Edi,我有一个web服务,可以解析所有类型的EDI文件,并在需要时将其转换为XML。为了知道我处理的是什么类型的文件和客户,我需要执行一个正则表达式,以便从850 EDI文件中的N1段获取客户发货地址id。此客户未使用我们的标准X12实现。我需要模式变量中括号中的所有三个值。我似乎无法让我的正则表达式正常工作以获得客户发货id。有人能告诉我正则表达式哪里出了问题吗?我已经从文件中包含了一些示例数据。本例中的客户发货人id为“333333”。命名的账单将是“Test123 Information Goe

我有一个web服务,可以解析所有类型的EDI文件,并在需要时将其转换为XML。为了知道我处理的是什么类型的文件和客户,我需要执行一个正则表达式,以便从850 EDI文件中的N1段获取客户发货地址id。此客户未使用我们的标准X12实现。我需要模式变量中括号中的所有三个值。我似乎无法让我的正则表达式正常工作以获得客户发货id。有人能告诉我正则表达式哪里出了问题吗?我已经从文件中包含了一些示例数据。本例中的客户发货人id为“333333”。命名的账单将是“Test123 Information Goes Here”,代码限定符将是“91”


问题是
[A-Za-z0-9]+
与“Test123信息在此显示”中的空格不匹配。您应该能够将正则表达式简化为以下内容,因为段是分隔的。另外,您也不希望锚定位于末尾,因为我猜N1段通常不会是文件中的最后一段。另外,我不确定您是否真的需要
RegexOptions.IgnoreCase
,因为段名称和限定符应该是大写的。最后,您应该在分隔符上使用
Regex.Escape()
,以确保它们在需要时被转义,而不是假设需要对段分隔符进行分隔

string input = "ISA`00`          `00`          `01`111111111      `01`222222222      `150629`1243`U`00401`000011282`0`T`!^GS`PO`111111111`222222222`20150629`1243`11282`X`004010^ST`850`0001^BEG`00`NE`4503214505``20150421`^N1`BT`Test123 Information Goes Here`91`333333^";
char segmentDelimiter = input[105];
char elementDelimiter = input[103];
string pattern = string.Format(
    @"N1{0}BT{0}(.*?){0}(.*?){0}(.*?){1}", 
    Regex.Escape(elementDelimiter.ToString()), 
    Regex.Escape(segmentDelimiter.ToString()));
Match match = Regex.Match(input, pattern);
string customerShipToID = match.Groups[3].Value;

为什么字符串中有换行符(
“\r\n”
)?X12通常没有换行符。对不起,我忘了删除这些换行符。我在文件中添加了换行符,以便于阅读。
string input = "ISA`00`          `00`          `01`111111111      `01`222222222      `150629`1243`U`00401`000011282`0`T`!^GS`PO`111111111`222222222`20150629`1243`11282`X`004010^ST`850`0001^BEG`00`NE`4503214505``20150421`^N1`BT`Test123 Information Goes Here`91`333333^";
char segmentDelimiter = input[105];
char elementDelimiter = input[103];
string pattern = string.Format(
    @"N1{0}BT{0}(.*?){0}(.*?){0}(.*?){1}", 
    Regex.Escape(elementDelimiter.ToString()), 
    Regex.Escape(segmentDelimiter.ToString()));
Match match = Regex.Match(input, pattern);
string customerShipToID = match.Groups[3].Value;