Pregunta

Soy nuevo en expresiones regulares.

Quiero hacer búsqueda multilínea. Aquí está el ejemplo de lo que quiero hacer:

Supongamos que tengo el siguiente texto:

*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.*

Quiero escribir RegEx, que primero debería intentar hacer coincidir la palabra " Proyecto " que puede ser en mayúsculas o minúsculas.

Si " proyecto " coincidencias, luego RegEx debe intentar coincidir con el cliente, rol, entorno. Si RegEx. coincide con CUALQUIERA de estos, entonces el partido está completo. (Las palabras cliente, función, entorno pueden ser, en cualquier caso, también pueden o no estar en la misma línea que la palabra "proyecto")

He escrito una expresión regular para la tarea anterior que es así:

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

Este RegEx. coincide con el Proyecto 1, pero no coincide con el Proyecto 2.

¿Puede alguien decirme qué tiene de malo este RegEx o cómo escribir RegEx para este tipo de texto?

¿Fue útil?

Solución

Prueba esto:

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

Otros consejos

En el caso de C #, puede especificar las opciones de multilínea como un parámetro para el constructor Regex:

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

Para obtener más detalles sobre el código, consulte el enlace: C # y Regex: cómo extraer cadenas entre comillas

ya que no especificó un lenguaje de programación, aquí hay algunos patrones de uso común para lograr esto

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

También puedes usar

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

para eliminar la necesidad de esos (P | p) etc.

En C #, debe especificar estos indicadores en el constructor de expresiones regulares, solo use autocompletar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top