首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >正则表达式用于换行符和空格

正则表达式用于换行符和空格
EN

Stack Overflow用户
提问于 2014-12-23 17:21:14
回答 2查看 146关注 0票数 0

我有一个用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倍。

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

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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

票数 1
EN

Stack Overflow用户

发布于 2015-02-03 18:17:57

为什么要重新发明方向盘?只需更改正则表达式以使用正确的选项:

代码语言:javascript
运行
复制
RegexOptions options     = RegexOptions.Multiline
                         | RegexOptions.Ignorecase
                         ;
Regex        rxCopyright = new Regex( "^\s*Copyright", options );

string[]     lines       = rxCopyright.Split( yourStringHere ) ;

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

使用多行模式,其中^$匹配每一行的开始和结束(而不是输入字符串的开始和结束)。有关更多信息,请参见多线模式

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

如果您想要使用圆括号来澄清,请将RegexOptions.ExplicitCapture添加到混合中。它

指定唯一有效的捕获是表单(?<name>…)的显式命名或编号组。这允许未命名的圆括号充当非捕获组,而不需要表达式(?:…)的语法笨拙。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27625108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档