2011-02-09 20 views
6

He intentado hacer lo siguiente con el objeto VB Regular Expression pero no he podido encontrar una manera fácil de hacerlo. ¿Hay alguien que pueda proporcionar algunas sugerencias?Expresión regular: cómo encontrar una coincidencia dentro de un partido?

Por ejemplo, tengo una cadena "12 < 56> 89", me gustaría obtener la cadena dentro de "<>" que debería ser "56" en este caso. Lo que estoy haciendo actualmente es tratar de encontrar la expresión "< \ d +>" que devolverá < 56>. Luego trato de encontrar la expresión "\ d +" del resultado de la primera coincidencia que devolverá 56.

No me gusta de esta manera porque necesita llamar a la función dos veces. Me pregunto si es posible introducir la cadena dentro del "<>" usando solo una expresión regular. ¡Gracias!

Gracias, Allen

Respuesta

8

uso de la expresión "< (\ d +)>"

A continuación, puede acceder a todos los partidos como una colección. Su expresión regular puede coincidir más de una vez si establece RegEx.Global = True. La primera coincidencia se encuentra en var (0), segundo en var (1). Subpartido grupos se encuentran en var (0) .SubMatches (0), etc. Si sólo lo hace una vez, puede que una línea:

Dim RegEx : Set RegEx = New RegExp 
RegEx.Pattern = "<(\d+)>" 
Dim strTemp : strTemp = "12<56>89" 
WScript.Echo RegEx.Execute(strTemp)(0).SubMatches(0) 

probar sus expresiones regulares aquí: http://www.regular-expressions.info/vbscriptexample.html

+0

Gracias Jeff. ¿Cómo puedo devolver el grupo Variable $ 1? Lo que realmente trato de hacer es encontrar una cadena entre dos cadenas pero excluyendo las dos cadenas de límites del resultado. Trid la expresión lookaround "(? <=<)\d+(?=>)" pero no pareció funcionar. ¿Alguna sugerencia más? Gracias, Allen – Allen

+0

Ah, lo siento. Mi respuesta fue para Perl. Actualizado para vbscript –

+0

¡Funciona! Muchas gracias por tu ayuda, Jeff. Además, gracias por compartir el enlace para probar VBs Regular Expressions. – Allen

3

Use la expresión < (\ d +)>. Ejecutar la expresión regular usando

Set matches = expr.Execute(text) 
If matches.Count > 0 Then 
    result = matches(0).Submatches(0) 
End If 

La colección subcoincidencias contiene cadenas que corresponden a las agrupaciones paréntesis en la expresión.

+0

Gracias por su ayuda, Tmdean. No pensé en usar la colección Submatches. Esto funciona perfectamente! – Allen

Cuestiones relacionadas