正则表达式与换行符和空格一起使用

本文关键字:一起 空格 换行符 正则表达式 | 更新日期: 2023-09-27 18:35:18

我有一个文本文件,我正在使用C#程序读取,需要拆分它的内容。 我决定使用Regex.Split().

我试图寻找的模式是'n( )+Copyright

下面是文本的示例:

''r'''r'语言: 英语''r'''r'分布: 每个区域''r'''r'出版物类型: 报纸''r'''r'''r'

版权所有 2014 华盛顿邮报.新闻周刊互动公司有限责任公司 d/b/a''r' 华盛顿邮报数字''r' 保留所有权利''r'"

包含换行符的原因是因为我也有一些段落中出现版权一词的情况:

''r''

n''r'摘自Doug Swanson的Blood Aces,由Penguin''r'Group (USA) LLC成员Viking于2014年8月14日出版。版权所有 © 2014 Doug J. Swanson。''r'

但是我遇到的问题是当我执行此调用时:

var splitContent= Regex.Split(filecontent, @"'n( )+Copyright");

我得到的物品数量是splitContent的 2 倍以上。 我尝试将正则表达式模式修改为 @"('n){1}?( )+Copyright" 和其他一些类似的类型模式,我得到的项目数是我应该得到splitContent的 4-5 倍。

这是执行这种正则表达式的正确方法吗?

任何帮助将不胜感激。

正则表达式与换行符和空格一起使用

如果在Regex.Split表达式中使用捕获括号,则任何捕获的文本都将包含在生成的字符串数组中。例如,如果将字符串"plum-pear"拆分在位于捕获括号内的连字符上,则返回的数组将包含包含连字符的字符串元素。

using System;
using System.Text.RegularExpressions;
public class Example
{
   public static void Main()
   {
      string input = "plum-pear";
      string pattern = "(-)";
      string[] substrings = Regex.Split(input, pattern);    // Split on hyphens 
      foreach (string match in substrings)
      {
         Console.WriteLine("'{0}'", match);
      }
   }
}
// The example displays the following output:
//    'plum'
//    '-'
//    'pear'

正则表达式.分裂

为什么要尝试重新发明轮子?只需更改正则表达式即可使用正确的选项:

RegexOptions options     = RegexOptions.Multiline
                         | RegexOptions.Ignorecase
                         ;
Regex        rxCopyright = new Regex( "^'s*Copyright", options );
string[]     lines       = rxCopyright.Split( yourStringHere ) ;

RegexOptions.Multiline告诉正则表达式引擎

使用多行模式,其中^$与开头和结尾匹配 每行(而不是输入字符串的开头和结尾)。 有关详细信息,请参阅多行模式。

因此,您的文本语料库将使用单词 copyright 在任何行的开头(带或不带前导空格)拆分为块。

如果您想使用括号以保持清晰,请在组合中添加RegexOptions.ExplicitCapture。它

指定仅显式命名或编号有效的捕获 形式(?<name>…)的组。这允许未命名的括号充当非捕获组,而不会像表达式(?:…)那样笨拙。