2011-07-06 11 views
13

que estoy tratando de coincidir con esta expresión:¿Cómo hacer coincidir el comienzo o el final de una línea usando C# 's Regex?

^COMA1TA2000,.*$ 

con este texto:

# Qualquer linha iniciada por # será ignorada 
# Caracteres que não podem serem usados na nomenclatura das copiadoras ou modelos. 
# & < > " ' 
COMA1TA2000,ta-2000,hd,COMB1 
#COMA2TA2000,ta-2000,hd,COMB2 
#COMA3TA2000,ta-2000,hd,COMB3 

que puede hacer que el uso de Notepad++, pero no puedo con la clase C# Regex.

content = sr.ReadToEnd(); 
string pattern = "^COMA1TA2000,.*$"; 
if(Regex.IsMatch(content, pattern)) 
System.Windows.Forms.MessageBox.Show("Test"); 

¿Qué me falta?

+0

Para que quede claro, su línea de 'IsMatch' vuelve falsa? –

Respuesta

0

Utilice File.ReadLines en lugar del método ReadToEnd y aplique expresiones regulares en cada línea.

Lo que está haciendo ahora, es leer todo el texto como un bloque de texto y la opción MultiLine a veces no funciona bien (ya que hay diferentes caracteres CRLF en diferentes sistemas operativos y cosas por el estilo).

Mi sugerencia es la siguiente:

string[] lines = File.ReadAllLines("path to your text file"); 
Regex regex = new Regex("^pattern$"); 
foreach (string line in lines) 
{ 
    Match match = regex.Match(line.Trim()) 
    if (match.Successful) 
    { 
     // have your match here. 
    } 
} 
+0

Es una buena idea, lo recordaré en mi próximo proyecto. Pero para esta pregunta, la primera respuesta es la correcta. – MaikoID

10

O establecer la opción de varias líneas de expresión regular (?m): (?m)^COMA1TA2000,.*$

+1

En un entorno donde solo tengo acceso a las expresiones regulares de .net, no al código que las crea y las ejecuta, pensé que no tenía suerte, ya que me pareció que era necesario establecer la opción de línea múltiple para lo que estaba intentando hacer. . ¡Eso funciona totalmente! Aprendí algo nuevo e ingenioso. :) – neminem

+0

@neminem, Bienvenido :) –

Cuestiones relacionadas