在 C# 中使用特定单词拆分文件 [重复]

Posted

技术标签:

【中文标题】在 C# 中使用特定单词拆分文件 [重复]【英文标题】:Split a file using specific word in C# [duplicate] 【发布时间】:2020-08-21 05:25:47 【问题描述】:

有一个文件要拆分

MSH|^~\&||||^asdasdasd|||asdasd|637226866166648574|637226866166648574|2.4
EVN|asd|20200416|20200416
PID|1|PW9074asdasd41|asd|PW907441|asdsad^wqe^wqeqwe||19700524|M
MSH|^~\&||||^qweqwewqe|||qwewqeqw|637226866166648574|637226866166648574|2.4
EVN|P03|20200416|20200416
PID|1|PW907441|PW907441|PW907441|Purvis^Walter^Rayshawn||19700524|M

我想使用 MSH 拆分它,这样结果就是一个字符串数组

array[0]=
"MSH|^~\&||||^asdasdasd|||asdasd|637226866166648574|637226866166648574|2.4
EVN|asd|20200416|20200416
PID|1|PW9074asdasd41|asd|PW907441|asdsad^wqe^wqeqwe||19700524|M";

array[1]=
"MSH|^~\&||||^asdasdasd|||asdasd|637226866166648574|637226866166648574|2.4
EVN|asd|20200416|20200416
PID|1|PW9074asdasd41|asd|PW907441|asdsad^wqe^wqeqwe||19700524|M";

到目前为止我所尝试的:

string[] sentences = Regex.Split(a, @"\W*((?i)MSH(?-i))\W*");

结果:

array[0]="";
array[1]="MSH";
array[2]="asdasdasd|||asdasd|637226866166648574|637226866166648574|2.4
    EVN|asd|20200416|20200416
    PID|1|PW9074asdasd41|asd|PW907441|asdsad^wqe^wqeqwe||19700524|M";
array[3]="MSH";
array[4]="asdasdasd|||asdasd|637226866166648574|637226866166648574|2.4
    EVN|asd|20200416|20200416
    PID|1|PW9074asdasd41|asd|PW907441|asdsad^wqe^wqeqwe||19700524|M";

或者至少在索引 1 和 2 拆分后它不应该错过 |^~\&||||^

【问题讨论】:

您面临的编程问题是什么?您只发布了一个任务 @WiktorStribiżew 我已经添加了代码和问题。 试试(?i)(?!^)(?=MSH)。你的字符串可以有MshmSh 吗?或者它是否总是大写的MSH 可以有msh Msh MsH等 【参考方案1】:

您可以简单地使用 Split() 函数。下面生成一个 IEnumerable,如果需要,可以使用 ToArray 创建一个数组:

void Main()

    string s = @"MSH|^~\&||||^asdasdasd|||asdasd|637226866166648574|637226866166648574|2.4
EVN|asd|20200416|20200416
PID|1|PW9074asdasd41|asd|PW907441|asdsad^wqe^wqeqwe||19700524|M
MSH|^~\&||||^qweqwewqe|||qwewqeqw|637226866166648574|637226866166648574|2.4
EVN|P03|20200416|20200416
PID|1|PW907441|PW907441|PW907441|Purvis^Walter^Rayshawn||19700524|M";

    foreach (var element in s.Split(new string[]  "MSH" , StringSplitOptions.RemoveEmptyEntries).Select(x => $"MSHx"))
    
        Console.WriteLine(element);
    

【讨论】:

相反。您的解决方案错过了 OP 使用不区分大小写的 MSH 字符串进行拆分的事实。如果有MshmSh,你的解决方案就不行,所以是错误的。 @WiktorStribiżew,您只是错过了后来添加到需求中的事实。没有办法事先知道一个人的想法。我们这里没有魔术 8 球。 不,它后来没有添加,当您发布答案时它就在那里。你明白(?i) 是什么意思吗?这正是 OP 一开始就使用正则表达式的原因。 @WiktorStribiżew 我看到你的数学有点欠缺。检查时间。 我一直都在这里,不需要数学。请修正您的答案或删除。【参考方案2】:

如果您想拆分 MSH,Cetin Basoz 是对的。它会完美地做到这一点:

var sentences = a.Split(new String[]  "MSH" , StringSplitOptions.RemoveEmptyEntries);

如果您想不区分大小写,可以使用比您之前使用的正则表达式简单得多的方法:

var sentences = Regex.Split(a, "MSH", RegexOptions.IgnoreCase);

【讨论】:

不,第一个不区分大小写,第二个将从匹配项中删除 MSH

以上是关于在 C# 中使用特定单词拆分文件 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在列表中拆分字符串的单词[重复]

在c#中拆分逗号分隔多个字符串[重复]

用空格(或任何字符)将文本单元格拆分为任意数量的单词,重复单词

LeetCode--单词拆分

139. 单词拆分

139-单词拆分