2012-04-24 14 views
5

Quiero hacer coincidir (en este fragmento de código) todo pero no incluir una nueva línea, que es lo que yo pensaba. haría. ¿Podría alguien arrojar luz sobre lo que me estoy perdiendo por favor?vba regex: dot matching newline

Public Sub regexp() 

Dim oRegExp As regexp 
Dim oMatches As MatchCollection 
Dim oMatch As Match 
Dim sString As String 

sString = _ 
    "one" & vbNewLine & _ 
    "two" & vbNewLine 

Set oRegExp = New regexp 
With oRegExp 
    .Global = True 
    .Pattern = ".+" 
    Set oMatches = .Execute(sString) 
    For Each oMatch In oMatches 
     Debug.Print "*" & oMatch.Value & "*" 
    Next oMatch 
End With 

End Sub 

salida es

*one 
* 
*two 
* 

espera que la producción

*one* 
*two* 

¿Cómo puedo evitar el salto de línea en la salida? Gracias.

Respuesta

7

Si usa [^\n] en lugar de ., coincidirá con cualquier carácter excepto el carácter de la nueva línea.

+0

Lamentablemente, eso me da el mismo resultado. – wfsp

+5

Pruebe '[^ \ n \ r]' en su lugar: la [documentación] (http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.constants.vbnewline.aspx) sugiere que 'vbNewLine' es solo un nuevo carácter de línea, pero tengo algunos recuerdos vagos, en realidad es la nueva secuencia de caracteres de línea específica del sistema, que incluye un retorno de carro en Windows. – eggyal

+0

Eso fue todo, muchas gracias. El caso real era un archivo de texto y tu solución funciona bien también. Gracias otra véz. – wfsp