我有一个用C#
程序读取的文本文件,并且需要分割它的内容。我决定使用Regex.Split()
。
我想要寻找的模式是\n( )+Copyright
下面是一个文本示例:
\r\n\n\n Washingtonpost.Newsweek互动公司:英语\r\n\n每一区域\r\n\r\n-类型:报纸\r\n\r\n版权2014年互动公司,LLC d/b/a\r\r\n华盛顿邮报数字版权保留\r\r\n“
之所以包括这个换行符,是因为我也有在段落中出现版权这个词的例子:
从血Aces的道格斯旺森,将出版维京,企鹅集团(美国)有限责任公司成员于2014年8月14日出版。2014年版权,DougJ.Swanson,\r\n
但是,我遇到的问题是,当我执行此调用时:
var splitContent= Regex.Split(filecontent, @"\n( )+Copyright");
我在splitContent
中获得的项目超过了应有的2倍。我尝试将regex模式修改为@"(\n){1}?( )+Copyright"
,还有一些类似的模式,我得到的是splitContent
中应该得到的项数的4-5倍。
这是执行这种正则表达式的正确方法吗?
任何帮助都将不胜感激。
发布于 2015-02-03 17:38:42
如果在
Regex.Split
表达式中使用捕获括号,则在生成的字符串数组中包含任何捕获的文本。例如,如果在捕获括号内的连字符上拆分字符串“梅子-梨”,则返回的数组包含一个包含连字符的字符串元素。 使用系统;使用System.Text.RegularExpressions;公共类示例{ public (){ string =“string[]”;string pattern = "(-)";string[]子字符串=Regex.Split(输入,模式);//拆分连字符前缀(子字符串匹配){Console.WriteLine(“{0}”,匹配);}} //该示例显示以下输出: // 'pear‘// '-’//‘pear’ Regex.Split
发布于 2015-02-03 18:17:57
为什么要重新发明方向盘?只需更改正则表达式以使用正确的选项:
RegexOptions options = RegexOptions.Multiline
| RegexOptions.Ignorecase
;
Regex rxCopyright = new Regex( "^\s*Copyright", options );
string[] lines = rxCopyright.Split( yourStringHere ) ;
RegexOptions.Multiline
告诉正则表达式引擎
使用多行模式,其中
^
和$
匹配每一行的开始和结束(而不是输入字符串的开始和结束)。有关更多信息,请参见多线模式。
因此,您的文本语料库将使用单词copyright
分割成块,如果在任何行的开头(带或不带前导空格)。
如果您想要使用圆括号来澄清,请将RegexOptions.ExplicitCapture
添加到混合中。它
指定唯一有效的捕获是表单
(?<name>…)
的显式命名或编号组。这允许未命名的圆括号充当非捕获组,而不需要表达式(?:…)
的语法笨拙。
https://stackoverflow.com/questions/27625108
复制相似问题