【问题标题】:Split a file using specific word in C# [duplicate]在 C# 中使用特定单词拆分文件 [重复]
【发布时间】: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等

标签: c# .net regex split


【解决方案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 => $"MSH{x}"))
    {
        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
猜你喜欢
  • 2016-10-27
  • 1970-01-01
  • 2021-04-06
  • 2022-08-22
  • 1970-01-01
  • 2018-08-20
  • 2019-04-30
  • 2016-09-16
  • 2013-08-10
相关资源
最近更新 更多