如何使用正则表达式进行多行搜索?

3
我是一个新手,不太懂正则表达式。
我想要进行多行搜索。以下是我想要实现的示例:
假设我有以下文本:
*Project #1: CVC – Customer Value Creation (2007年9月至今) Time Warner Cable是世界领先的媒体和娱乐公司,Time Warner Cable (TWC)使同轴电缆颤动。 客户:美国时代华纳有线电视公司。 ETL工具:Informatica 7.1.4 数据库:Oracle 9i。 角色:ETL开发人员/团队负责人。 操作系统:UNIX。 职责: 创建测试计划和测试用例书。 对团队成员的映射进行同行评审。 记录映射。 领导开发团队。 向现场发送报告。 修复与缺陷、数据和性能相关的错误。 项目2: MYER – 销售分析系统(2005年11月至今) Coles Myer是澳大利亚最大的零售商之一,在澳大利亚拥有超过2,000家门店, 客户:Coles Myer Retail,澳大利亚。 ETL工具:Informatica 7.1.3 数据库:Oracle 8i。 角色:ETL开发人员。 操作系统:UNIX。 职责: 使用Informatica提取、转换和加载数据。 了解整个源系统。 创建并运行会话和工作流。 使用Syncsort应用程序创建排序文件。*
我想编写一个正则表达式,首先尝试匹配单词"Project",该单词可以是小写或大写。
如果匹配了"project",则正则表达式应尝试匹配客户、角色、环境中的任何一个。
如果正则表达式匹配到这些中的任何一个,则匹配完成。(客户、角色、环境这些词可能大小写不同,也可能与“project”不在同一行)
我已经为上述任务编写了一个正则表达式,如下所示:
^((P|p)roject.*\s*.*((((E|e)nviornment)|((P|p)latform)|((R|r)ole(s)?)|((R|r)esponsibilit(y|ies))|((C|c)lient)|((C|c)ustomer)|((P|p)eriod)))

这个正则表达式可以匹配项目#1,但无法匹配项目#2。

请问有人能告诉我这个正则表达式哪里出了问题,或者如何编写适用于这种文本的正则表达式吗?


1
你使用哪种编程语言? - Greg Hewgill
3个回答

2

试试这个:

Regex project = new Regex(
   @"^(Project [\s\S]*?" + 
   @"(Environment|Platform|Roles?|Responsibilit(y|ies)|Client|Customer|Period))",
   RegexOptions.ECMAScript | RegexOptions.IgnoreCase | RegexOptions.Multiline);

1
在C#中,您可以将Multiline选项作为参数传递给Regex构造函数来指定。
Regex r = new Regex("(var matches = new Array\\([^\\)]*\\);)",  
          RegexOptions.IgnoreCase | RegexOptions.Compiled 
          | RegexOptions.Multiline);

更多代码细节请参考链接:C#和Regex:如何提取引号之间的字符串


0

由于您没有指定编程语言,这里提供一些常用的模式来实现此目的

/yourRegexpattern/m  <-- the m stays for multiline

你也可以使用

/yourRegexpattern/im <-- the i stays for case insensitivity

为了消除那些 (P|p) 的需要。

在 C# 中,您必须在正则表达式的构造函数中指定这些标志,只需使用自动完成即可。


感谢您如此迅速的回复。 我正在使用C#来完成这项任务,但为了测试正则表达式,我正在使用Expresso编辑器。 在Expresso中,这个正则表达式无法工作。它能够搜索“Project #1”,但无法搜索“Project #2”。 - Shekhar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接