我有这个字符串(来自EDI数据):
ISA*ESA?ISA*ESA?
*
表示它可以是任何字符,并且可以是任何长度。?
表示任何单个字符。确保仅
ISA
和ESA
不变。我需要将其分成两个看起来像这样的字符串:
"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|
请注意,如果您在
ISA
和ESA
之间的字符串具有我们正在寻找的相同模式,那么您将必须找到一些巧妙的解决方法。稍微解释一下正则表达式:
(?<=ESA) Look-behind assertion. This portion is not captured but still matched
(?=ISA) Look-ahead assertion. This portion is not captured but still matched
使用这些环顾断言,您可以找到用于拆分的正确
|
字符