2011-12-15 24 views
15

Quiero hacer coincidir cualquier cosa entre paréntesis, pero el resultado debe excluir los paréntesis también.C# Regex coincide con cualquier cosa dentro de paréntesis

Ejemplos:
Inicializar (P90W)
freno (45X)

Resultados:
990W
45X

resultados nota sin los paréntesis.

He estado tratando de hacer que esto funcione, pero fue en vano intenté algunas variaciones, pero sé que es una cosa simple que me falta y no quiero usar Reemplazar para lograrlo.

var item = "Brake(45X)" 
Regex searchTerm = new Regex(@"\((.*)\)"); 
var value = (searchTerm.Match(item).Groups.Count > 0) ? 
    searchTerm.Match(item).Groups[0].Value : string.Empty; 
+0

no sé C#, pero es una nueva expresión regular '()' supone que es básico, extendido o PREG? ¿Has intentado cambiar qué conjunto de soportes se escapó con barras diagonales inversas? Quizás '\ (' significa "marcar el inicio del rango" y '(' es un literal paren? – ghoti

+0

Esto me parece bien, ¿qué está pasando? 'Value' es' string.Empty'? –

+0

el valor está regresando (P90W) o (45X) con los paréntesis –

Respuesta

27

Algunas personas me acusan de utilizar cero afirmaciones ancho todo el tiempo:

resultString = Regex.Match(subjectString, @"(?<=\().+?(?=\))").Value; 

Pero lo hacen exactamente lo que quiere. No capture lo que no quiere capturar.

+5

¿Por qué necesitas lookahead y lookbehind? '@" \ ((^ ^)] *) \) "' es mucho más simple, y 4 caracteres más cortos :) – kol

+0

Esto es genial, el comentario de kol también es genial, pero diré que la respuesta de FailedDev me enseñó a hacer algo que no sabía antes – Feign

0
Regex searchTerm = new Regex(@"\(([^\)]*)\)"); 
10

try regex @"\((.*?)\)"

EDIT: También el resultado será el grupo 1 no 0, grupo 0 debe contener todo el resultado de expresiones regulares, no el primer valor entre paréntesis

+0

Útil! Necesitaba encontrar todas las partes de la cadena dentro de llaves, así que usé este código simple: string pattern = @ "{(. *?)}"; MatchCollection matches = Regex.Matches (texto, patrón); – Pisu

3

Retire el interior paranthesis y vuelva a intentarlo:

new Regex(@"(\([^\)]+\))"); 

Cuando no escapa paranthesi En regex, si está usando la coincidencia de grupo, solo devolverá el contenido dentro de la paranthesis. Entonces, si tiene, new Regex(@'(a)(b))', la coincidencia 1 será a y la coincidencia 2 será b. El partido 0 es el partido completo.

+0

Un comentario, si quieres demasiado vacío paranthesis: (\ ([^ \)] * \)) – Dani

0

probar esto:

var pattern = @".*public.*(.*\(.*\))"; 
Regex.Matches(input,pattern) 
Cuestiones relacionadas