2010-10-27 12 views
6

Estoy seguro de que hay una solución simple, pero parece que me la falta.Problema de Regex C#

necesito una expresión regular para hacer lo siguiente:

asdf.txt;qwer debe coincidir con asdf.txt

"as;df.txt";qwer debe coincidir as;df.txt

Como se puede ver, tengo que coincidir con el punto y coma, pero si existen citas (cuando hay un punto y coma en el valor), necesito hacer coincidir las comillas. Dado que estoy buscando un nombre de archivo, nunca habrá una cita en el valor.

Mi sabor de la expresión regular es C#.

Gracias por su ayuda!

+0

¿Puede haber escapado comillas (como \" o '') dentro de las comillas? –

Respuesta

2
"[^"]+"(?=;)|[^;]+(?=;) 

Esto coincide con el texto entre comillas dobles seguidos por un punto y coma o texto seguido por un punto y coma. El punto y coma NO está incluido en el partido.

EDIT: realizado mi primer intento coincidirá con las comillas. La siguiente expresión excluirá las comillas, pero usa subexpresiones.

"([^"]+)";|([^;]+); 
+0

tengo nunca usó esa notación? = ¿Cómo se llama y qué sabores lo admiten? –

+1

Es igual a 'anticipación'. Es compatible con al menos .NET y JavaScript. Mi sitio favorito para probar expresiones regulares es http: // www .regexlib.com/RETester.aspx. Es compatible con varios motores, incluidos JavaScript y .NET. –

+1

Me guiaste por el camino correcto. Aquí está la expresión regular que elegí '(? <=")? [^ "] + (? = "?;)' –

0

¿Es necesario utilizar expresiones regulares, es posible que utilices el método # cadena de C contiene:

string s = "asdf.txt;qwer"; 
string s1 = "\"as;df.txt\";qwer"; 

return s.Contains("asdf.txt"); //returns true 
return s1.Contains("\"as;df.txt\""); //returns true 
0

Si usted está buscando para las dos cadenas explícitas asdf.txt y como; df.txt éstos continuación, puede simplemente sean sus dos epresiones regex. Entonces algo como lo siguiente.

Matches matches = Regex.Matches('asdf.txt;qwer',"asdf.txt"); 

y

Matches matches = Regex.Matches('"as;df.txt";qwer',"as;df.txt"); 

disfrutar!

+0

no son aquellas cadenas específicas. Podrían ser cualquier nombre de archivo válido –

1

Esto debería hacer usted:

(".*"|.*); 

Es técnicamente coincide con el punto y coma así, pero se puede CHOP que fuera o simplemente utilizar la referencia hacia atrás (si C# soporta referencias hacia atrás)

1

Esto coincidirá a ; si no hay comillas o el texto entre comillas seguido de ; si hay comillas.

("[^"]+";|[^;]+;) 
+0

Este partido incluirá el punto y coma. –