正则表达式与换行符和空格一起使用
本文关键字:一起 空格 换行符 正则表达式 | 更新日期: 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>…)
的组。这允许未命名的括号充当非捕获组,而不会像表达式(?:…)
那样笨拙。