Как сделать многострочный поиск по регулярному выражению? - PullRequest
3 голосов
/ 22 октября 2009

Я новичок в регулярных выражениях.

Я хочу сделать многострочный поиск. Вот пример того, что я хочу сделать:

Предположим, у меня есть следующий текст:

*Project #1:
CVC – Customer Value Creation (Sep 2007 – till now)
Time Warner Cable is the world's leading media and entertainment company, Time Warner Cable (TWC) makes coaxial quiver.
Client   : Time Warner Cable, US.
ETL Tool  : Informatica 7.1.4
Database  : Oracle 9i.
Role   : ETL Developer/Team Lead.
O/S   : UNIX.
Responsibilities:
Created Test Plan and Test Case Book.
Peer reviewed team members Mappings.
Documented Mappings.
Leading the Development Team.
Sending Reports to onsite.
Bug fixing for Defects, Data and Performance related.                                                                                                     
Project #2:
MYER – Sales Analysis system (Nov 2005 – till now)
            Coles Myer is one of Australia's largest retailers with more than 2,000 stores throughout Australia,
Client   : Coles Myer Retail, Australia.
ETL Tool  : Informatica 7.1.3
Database  : Oracle 8i.
Role   : ETL Developer.
O/S   : UNIX.
Responsibilities:
Extraction, Transformation and Loading of the data using Informatica.
Understanding the entire source system.                                                                                     
Created and Run Sessions and Workflows.
Created Sort files using Syncsort Application.*

Я хочу написать RegEx, который должен сначала попытаться найти совпадение со словом «Project», которое может быть в маленьком или верхнем регистре.

Если «проект» совпадает, то RegEx должен попытаться сопоставить клиента, роль, среду. Если 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)))

Это RegEx. соответствует проекту № 1, но не соответствует проекту № 2.

Может кто-нибудь сказать мне, что не так с этим RegEx или как написать RegEx для такого рода текста?

Ответы [ 3 ]

2 голосов
/ 22 октября 2009

Попробуйте это:

Regex project = new Regex(
   @"^(Project [\s\S]*?" + 
   @"(Environment|Platform|Roles?|Responsibilit(y|ies)|Client|Customer|Period))",
   RegexOptions.ECMAScript | RegexOptions.IgnoreCase | RegexOptions.Multiline);
1 голос
/ 22 октября 2009

В случае C # вы можете указать опции Multiline в качестве параметра для конструктора Regex:

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

Для получения более подробной информации о коде см. Ссылку: C # и Regex: Как извлечь строки между кавычками

0 голосов
/ 22 октября 2009

, так как вы не указали язык программирования, вот несколько часто используемых шаблонов для достижения этой цели

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

Вы также можете использовать

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

, чтобы устранить необходимость этих (P|p) и т. Д.

В C # вы должны указать эти флаги в конструкторе регулярного выражения, просто используйте автозаполнение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...