我有这个字符串(来自EDI数据):

ISA*ESA?ISA*ESA?


*表示它可以是任何字符,并且可以是任何长度。

?表示任何单个字符。

确保仅ISAESA不变。

我需要将其分成两个看起来像这样的字符串:"ISA~this is date~ESA|"

"ISA~this is more data~ESA|"


我该如何在C#中执行此操作?

我不能使用string.split,因为它实际上没有定界符。

最佳答案

您可以使用Regex.Split完成此操作

string splitStr = "|", inputStr = "ISA~this is date~ESA|ISA~this is more data~ESA|";

var regex = new Regex($@"(?<=ESA){Regex.Escape(splitStr)}(?=ISA)", RegexOptions.Compiled);
var items = regex.Split(inputStr);

foreach (var item in items) {
    Console.WriteLine(item);
}


输出:

ISA~this is date~ESA
ISA~this is more data~ESA|


请注意,如果您在ISAESA之间的字符串具有我们正在寻找的相同模式,那么您将必须找到一些巧妙的解决方法。

稍微解释一下正则表达式:

(?<=ESA)   Look-behind assertion. This portion is not captured but still matched
(?=ISA)    Look-ahead assertion. This portion is not captured but still matched


使用这些环顾断言,您可以找到用于拆分的正确|字符

09-07 13:26