3

我是正则表达式的新手。

我想做多行搜索。这是我想要做的例子:

假设我有以下文本:

*项目#1:
CVC – 客户价值创造(2007 年 9 月 – 至今)
时代华纳有线电视是世界领先的媒体和娱乐公司,时代华纳有线电视(TWC)制造同轴电筒。
客户:时代华纳有线电视,美国。
ETL 工具:Informatica 7.1.4
数据库:Oracle 9i。
角色:ETL 开发人员/团队负责人。
操作系统:UNIX。
职责:
制定了测试计划和测试用例书。
同行评审的团队成员映射。
记录的映射。
领导开发团队。
将报告发送到现场。
缺陷、数据和性能相关的错误修复。                                                                                                     
项目#2:
MYER - 销售分析系统(2005 年 11 月 - 至今)
            Coles Myer 是澳大利亚最大的零售商之一,在澳大利亚拥有 2,000 多家门店,
客户:澳大利亚Coles Myer 零售店。
ETL 工具:Informatica 7.1.3
数据库:Oracle 8i。
角色:ETL 开发人员。
操作系统:UNIX。
职责:
使用 Informatica 提取、转换和加载数据。
了解整个源系统。                                                                                     
创建并运行会话和工作流。
使用 Syncsort 应用程序创建排序文件。*

我想编写正则表达式,它应该首先尝试匹配可以是小写或大写的单词“Project”。

如果“项目”匹配,那么 RegEx 应该尝试匹配客户端、角色、环境。如果正则表达式。匹配其中任何一个,则匹配完成。(客户、角色、环境等词在任何情况下都可以与“项目”一词在同一行,也可以不在同一行)

我为上述任务编写了一个正则表达式,如下所示:

^((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。

谁能告诉我这个正则表达式有什么问题或如何为这种文本编写正则表达式?

4

3 回答 3

2

试试这个:

Regex project = new Regex(
   @"^(Project [\s\S]*?" + 
   @"(Environment|Platform|Roles?|Responsibilit(y|ies)|Client|Customer|Period))",
   RegexOptions.ECMAScript | RegexOptions.IgnoreCase | RegexOptions.Multiline);
于 2009-10-22T10:57:43.053 回答
1

在 C# 的情况下,您可以将 Multiline 选项指定为 Regex 构造函数的参数:

Regex r = new Regex("(var matches = new Array\\([^\\)]*\\);)",  
          RegexOptions.IgnoreCase | RegexOptions.Compiled 
          | RegexOptions.Multiline);

更多代码细节请参考链接:C# and Regex: How to extract strings between quotes

于 2009-10-22T10:54:26.513 回答
0

因为你没有指定编程语言,这里有一些常用的模式来完成这个

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

你也可以使用

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

消除对那些(P|p)等的需要。

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

于 2009-10-22T10:47:38.690 回答