我已经在论坛上浏览了类似内容,但是找不到我需要的东西。
我正在读这样的字符串:
11/2/2017 12:26:42.064 OUT <stx>1H|\^&|||3_7556_Batman|||||cobas 8000|TSDWN|P|1<cr>P|1||221074||DOE^JOHN||19990622|M<cr>O|1|221074|0^50010^3^^S1^|^^^962^\^^^993^\^^^994^\^^^8228^|S|20171102084806|20171102084000||||A||||1||||||||||O<cr>C|1|L|DOE,JOHN^221074^^^|G<cr>L|1|N<cr><etx>C0<cr><lf>
并使用正则表达式@"\s{2,}"
对其进行拆分
我的问题是,有时该字符串在<stx>
行之后包含多个空格。示例:
11/2/2017 12:26:42.064 OUT <stx>1H|\^&|||3_7556_Batman|||||cobas 8000|TSDWN|P|1<cr>P|1||221074||DOE^JOHN||19990622|M<cr>O|1|221074|0^50010^3^^S1^|^^^962^\^^^993^\^^^994^\^^^8228^|S|20171102084806| |||A||||1||||||||||O<cr>C|1|L|DOE,JOHN^221074^^^|G<cr>L|1|N<cr><etx>C0<cr><lf>
我只想捕获<stx>
之前的多个空格。我已经尝试了一些积极的先行方式,但是它捕获了太多的小组。 @"\s{2,}(?=(.*)(<stx>))"
我只需要4组信息:日期,时间,出站,消息
答案 0 :(得分:0)
在C#Regex.Split
中,捕获的子字符串与拆分的块一起返回。
您需要从模式中删除捕获组:
var line = @"11/2/2017 12:26:42.064 OUT <stx>1H|\^&|||3_7556_Batman|||||cobas 8000|TSDWN|P|1<cr>P|1||221074||DOE^JOHN||19990622|M<cr>O|1|221074|0^50010^3^^S1^|^^^962^\^^^993^\^^^994^\^^^8228^|S|20171102084806|20171102084000||||A||||1||||||||||O<cr>C|1|L|DOE,JOHN^221074^^^|G<cr>L|1|N<cr><etx>C0<cr><lf>";
var split = Regex.Split(line, @"\s{2,}(?=.*<stx>)");
foreach (var s in split)
{
Console.WriteLine(s);
}
请参见C# demo
输出:
11/2/2017
12:26:42.064
OUT
<stx>1H|\^&|||3_7556_Batman|||||cobas 8000|TSDWN|P|1<cr>P|1||221074||DOE^JOHN||19990622|M<cr>O|1|221074|0^50010^3^^S1^|^^^962^\^^^993^\^^^994^\^^^8228^|S|20171102084806|20171102084000||||A||||1||||||||||O<cr>C|1|L|DOE,JOHN^221074^^^|G<cr>L|1|N<cr><etx>C0<cr><lf>
答案 1 :(得分:0)
像这样使用前瞻就足够了
\s{2,}(?=<stx>)
获取所有出现的至少两个空格,后跟<stx>