如何将有序多行文本拆分为数组c#

如何将有序多行文本拆分为数组c#,c#,regex,string,split,C#,Regex,String,Split,我想使用regex或split方法将有序多行文本拆分为数组 示例文本: W.班达拉,S.贝利,P.马蒂森,J.麦卡锡,C.琼斯,《公共部门的企业业务流程管理:案例》 澳大利亚公共服务部(DHS)的。J.Inf.Technol。 教学案例(2017) W.Bandara,H.Opsahl,在中小企业中开发组织范围的BPM能力:使用的方法、挑战和结果。 J.Inf.Technol。教学案例(2017) G.Barnett,《机器人过程自动化:添加到过程转换工具包》。白皮书IT0022-0005,Ov

我想使用regex或split方法将有序多行文本拆分为数组

示例文本:

  • W.班达拉,S.贝利,P.马蒂森,J.麦卡锡,C.琼斯,《公共部门的企业业务流程管理:案例》 澳大利亚公共服务部(DHS)的。J.Inf.Technol。 教学案例(2017)
  • W.Bandara,H.Opsahl,在中小企业中开发组织范围的BPM能力:使用的方法、挑战和结果。 J.Inf.Technol。教学案例(2017)
  • G.Barnett,《机器人过程自动化:添加到过程转换工具包》。白皮书IT0022-0005,Ovum咨询,2015年
  • 预期产出:

    var array = new string[] 
    {
      "W. Bandara, S. Bailey, P. Mathiesen, J. McCarthy, C. Jones, Enterprise business process management in the public sector: The case of the Department of Human Services (DHS) Australia. J. Inf. Technol. Teaching Cases (2017)",
      "W. Bandara, H. Opsahl, Developing organization-wide BPM capabilities in an SME: the approaches used, challenges and outcomes. J. Inf. Technol. Teaching Cases (2017)",
      "G. Barnett, Robotic process automation: Adding to the process transformation toolkit. White paper IT0022-0005, Ovum Consulting, 2015"
    }
    
    我试过下面的代码,但不起作用

    var result = Regex.Split(text, @"(^\d\.)\s(.*?)$",RegexOptions.Multiline | RegexOptions.Singleline | RegexOptions.RightToLeft);
    
    您的
    (^\d\)\s(.*)$
    regex包含两个捕获组,当与C#中的
    regex.Split
    一起使用时,它会输出捕获组捕获的所有文本。这不是你需要的。此外,
    \d
    仅匹配1位数字,字符串的行首超过1位

    你可以用

    var result = Regex.Split(text, @"(?m)^\d+\.\s*")
         .Where(x => !string.IsNullOrEmpty(x));
    

    请注意
    。其中(x=>!string.IsNullOrEmpty(x))
    部分代码对于删除由于字符串开头的第一个匹配而可能出现的空元素是必需的

    (?m)^\d+\.\s*
    模式表示:

    • (?m)
      -内联等效于
      RegexOptions。多行
      选项
    • ^
      -此处为行的开头
    • \d+
      -1+个数字(使用
      [0-9]
      或添加
      RegexOptions.ECMAScript
      以仅匹配ASCII数字)
    • \。
      -一个点
    • \s*
      -0+空格

    拆分和输入的问题在于有额外的换行符
    作为分隔符,因此您必须在其前面加入一个
    (?m)\s*^
    ,以吸取这些
    向上的即使如此,split在大多数情况下仍会为您提供空元素,如
    关于这件事,斯普利特是个老生常谈的人

    使用一个常规的Matches()函数,您会感觉更好

    (?m)^\S+\h+(.*)


    (?m)^\S+[^\S\r\n]+(.*)


    组1包含您的元素

    请尝试
    var result=Regex.Split(text,@“(?m)^\d+\.\s*”)。其中(x=>!string.IsNullOrEmpty(x))
    A.m.Bassam Alkharashi,L.Jesus,R.Tregear,建立商业办公室时发生了什么事?您对哪些数据位感兴趣?请显示预期的输出。避免拆分任何超过1或2个字符的复杂内容。改为使用匹配函数。有序文本是HTML格式还是纯文本?