2011-03-11 12 views
8

En el plugin "Herramientas de productividad de Visual Studio 2010" (que es genial), puede configurar las pestañas de archivo para que se codifiquen en colores en base a expresiones regulares.RegEx para que coincida con los nombres de archivo de la interfaz C#

tengo una expresión regular para diferenciar el color pestaña de archivos de interfaz (IMyInterface.cs) a partir de archivos regulares cs:

[I]{1}[A-Z]{1}.*\.cs$ 

Desafortunadamente esto también códigos de color cualquier archivo que comienza con una "I" de capital (Information.cs, por ejemplo).

¿Cómo podría modificarse este RegEx para incluir solo los archivos en los que la primera letra es "I" y la segunda letra no es minúscula?

+1

No soy un hacker de expresiones regulares, pero parece que ya debería ... Me sorprende que no lo haga. Es decir, a menos que la edición de @ BoltClock fuera a agregar en la parte [AZ] {1} de la expresión regular ... – Zannjaminderson

+3

Parece que el complemento está haciendo una coincidencia insensible a mayúsculas y minúsculas, no creo que haya mucho que puedas hacer al respecto . 'Regex r = new Regex (patrón, RegexOptions.IgnoreCase)' –

+0

Sí, la expresión prueba bien para mí también. Podría ser más simple pero no tiene nada de malo. –

Respuesta

0

¿Qué tal esto:

^I([A-Z][A-Za-z0-9]*){1}\.cs$ 

por lo

IMyInterface.cs // matches, MyInterface 
IB.cs // B 
IBa.cs // Ba 
IC1.cs // C1 
I.cs // don't 
Information.cs // don't 

Prooflink

5

Su expresión regular debería funcionar tal como es. Es posible que se ejecute en ignore el modo de caso. Tratar de desactivar ese modo dentro de su expresión regular con (?-i):

(?-i)[I]{1}[A-Z]{1}.*\.cs$ 
+0

Tu idea es muy buena, pero la expresión de OP no es correcta. En general, está bien, pero debería reescribirse: grupo de símbolos innecesarios; excedido, duplicar capturas, etc. – abatishchev

+2

@abatishchev: tienes razón, no está limpio, sin embargo funciona. Hice una copia perezosa y pegar.En cuanto a la parte '^' al principio, todo el mundo sugiere, no puedo suponer que la cadena de entrada contiene solo un nombre de archivo y no la ruta completa del archivo (no utilizo Power Tools). –

1

Los nombres de archivo en Windows no distinguen entre mayúsculas y minúsculas, así que, obviamente, las herramientas eléctricas estarán utilizando mayúsculas de minúsculas a juego.

2

probar este caso Insensible

"(?-i)^I[A-Z].*\.cs$" 

pone en marcha por primera vez.

Regular Expression Options

+0

'. *' Coincide con espacios en blanco y otros caracteres innecesarios – abatishchev

+0

@abatischev: Por cierto, si desea cumplir con todos los requisitos, debe considerar que un nombre de archivo en Visual Studio puede contener cualquier carácter permitido por Windows para un nombre de archivo, es decir, cualquier carácter que no sea: /?: & \ * "<> | #%, control unicode y caracteres sustitutos, nombres reservados del sistema, y ​​no son". "o" .. ". Eso permite espacios, guiones bajos, etc. En este caso particular, probablemente no haya necesidad de validar la conformidad completa del nombre del archivo; si el archivo existe, ya está conforme, todo lo que necesitamos es verificar si comienza por algo y termina por algo. –

0

basé mina cerca de los patrones predeterminados colocados allí y utiliza ^I[A-Z].*\.cs[ ]*(\[read only\])?$ - Creo que hay una cuestión de precedencia, aunque, por lo que si se deja la matcher predeterminado .cs patrón de allí y añadir el suyo para Al final, es posible que tenga el suyo oculto, porque coincidió primero con el general.

Y no se puede volver a ordenar o eliminarlas, así que es un poco más incómoda para obtener el pedido de trabajo así ...

Fwiw, no creo que la cuestión de mayúsculas y minúsculas ((?-i) hace alguna diferencia.

Cuestiones relacionadas