2010-01-14 14 views
9

Tengo una cadena "Este texto tiene algunos (texto entre paréntesis)". Entonces quiero recuperar el texto dentro del paréntesis usando expresiones regulares en C#. Pero el paréntesis ya es un carácter reservado en expresiones regulares. Entonces, ¿cómo conseguirlo?Usando paréntesis en el patrón de Expresiones regulares

Actualización 1

por lo que para el texto "afasdfas (2009)"

me trataron (.)/s((/d+)) y (.) (\d+) y (.*)/s((/d/d/d/d)). Ninguno de ellos está funcionando. ¿Algunas ideas?

+1

su información, todos los barras diagonales en sus expresiones regulares son se supone que son barras invertidas, es decir, '/ s' debe ser' \ s'. –

Respuesta

16

De esta manera:

// For "This text has some (text inside parenthesis)" 
Regex RegexObj = new Regex(@"\(([^\)]*)\)"); 

// For "afasdfas (2009)" 
Regex RegexObj = new Regex(@"\((\d+)\)"); 

Editar:

@SealedSun, CannibalSmith: Se ha cambiado. También utilizo @ "" pero esto era c/p de RegexBuddy: P

@Gregg: Sí, de hecho es más rápido, pero prefiero mantenerlo simple para responder a estas preguntas.

+0

+1, '(. *) \ ((\ D {4}) \)' –

+1

Me tomó la determinación de que el segundo '\' es necesario para escapar del carácter de escape de expresiones regulares '\'. Siempre escribo mi expresión regular en cadenas verbatim: '@" \ ((. *?) \ "' Me resulta más fácil de leer. –

+1

O 'Regex RegexObj = new Regex (@" \ ((. *?) \) ");'. – CannibalSmith

4

Para cualquier carácter que sea "especial" para una expresión regular, puede simplemente escapar de ellos con una barra invertida "\". Por ejemplo:

\([^\)]*\) 

Capturaría "(texto entre paréntesis)" en su cadena de ejemplo.

[^\)]* 

Debería ser un poco más seguro que el simple "." dentro del paréntesis, y también debería ser más rápido.

+1

No es necesario que escape el ')' dentro de una clase de caracteres. –

0

Solo agregue \(, \) alrededor de su paréntesis. por ejemplo:

(PatternInsideParenthesis)

será así:

\( (PatternInsideParenthesis) \)

Cuestiones relacionadas