2009-06-29 19 views
14

Actualmente estoy construyendo un ensamblador de juguetes en C# (yendo a través del libro The Elements Of Computing Systems).Regex - Coincide con un patrón antes de un personaje

Necesito coincidir con un patrón muy simple, pensé que sería un buen momento para aprender algunas expresiones regulares pero estoy luchando!

En los siguientes ejemplos Sólo me gustaría para que coincida con las cartas antes de que el '='

M = A

D = M

MD = A

A = D

AD = M

AMD = A

Yo he llegado con lo siguiente:

([A-Z]{1,3})= 

Sin embargo esto también coincide con el '=', que no quiero.

También probé:

([A-Z^\=]{1,3})= 

Pero todavía tengo el mismo problema - que coincide con el de un '=' firmar también.

Estoy usando this site para probar mis expresiones regulares.

Cualquier ayuda sería muy apreciada. Gracias de antemano.

+0

También necesita obtener .Groups [1] .Value.ToStrin g() para obtener la sección apropiada lejos del signo = – DevelopingChris

Respuesta

26

Lo que se quiere que se llama un ancho de cero, lookahead afirmación. Lo haces:

 
(Match this and capture)(?=before this) 

En su caso, esto sería:

 
([A-Z^]{1,3})(?==) 
4

El siguiente grupo voluntad todo antes del signo "=" y todo lo demás después.

([^=]*)=([^=]*) 

se lee algo como esto:

partido de cualquier cantidad de caracteres eso no es un "=", seguido por un "=", entonces cualquier cantidad de caracteres eso no es un "=".

+0

Probé su expresión regular en http://www.nregex.com/nregex/default.aspx No parecía funcionar, ¿podría ser algo con el motor de expresiones regulares que utiliza el sitio? De todos modos, he marcado una respuesta ahora para no preocuparme. Gracias sin embargo. – bplus

+0

El problema con esta expresión regular podría ser que, si es multilínea, el segundo comodín coincidirá con la parte después del signo igual actual, la nueva línea y luego los caracteres antes del siguiente signo igual. Querrá agregar el carácter delimitador dentro del segundo par de corchetes. –

0

También puede poner el signo igual en un parans que no captura con (?: ...)

([ADM]{1,3})(?:=) 

Ha sido un poco desde que hice este capítulo del libro, pero creo que ya que se necesita ambas partes de la expresión de todos modos, hice una división en las = resultantes en myArray [0] == M , myArray [1] == Un

+0

Los parens no capturados no harán nada útil. El signo igual seguirá siendo "capturado" como parte de la coincidencia general, que es lo que el OP intentaba evitar. –

-2

que necesitaba para que coincida con todos los personajes antes de que el '=' por lo que se le ocurrió esta

.*(?==)= 

Partidos todos los personajes antes '=', pero no "="

+0

La pregunta ya fue respondida adecuadamente, y acabo de emparejar '==' con tu expresión, por lo que parece que no funciona. Gracias por participar sin embargo. –

+0

Ahora, cuando comparé el comportamiento con la respuesta adecuada, veo que esto no es lo que OP quería. – Tola

Cuestiones relacionadas