regex excel vba string-split

División de cadenas en VBA usando RegEx



excel string-split (2)

Soy nuevo en VBA y me gustaría buscar ayuda con respecto al uso de RegEx y espero que de alguna manera pueda aclararme sobre lo que estoy haciendo mal. Actualmente estoy tratando de dividir una fecha en su fecha individual, mes y año, y los posibles delimitadores incluyen ",", "-" y "/".

Function formattedDate(inputDate As String) As String Dim dateString As String Dim dateStringArray() As String Dim day As Integer Dim month As String Dim year As Integer Dim assembledDate As String Dim monthNum As Integer Dim tempArray() As String Dim pattern As String() Dim RegEx As Object dateString = inputDate Set RegEx = CreateObject("VBScript.RegExp") pattern = "(/)|(,)|(-)" dateStringArray() = RegEx.Split(dateString, pattern) '' .... code continues

Esto es lo que estoy haciendo actualmente. Sin embargo, parece haber algo mal durante la función RegEx.Split, ya que parece hacer que mis códigos se bloqueen y no se procesen más.

Para confirmar, hice algo simple:

MsgBox("Hi") pattern = "(/)|(,)|(-)" dateStringArray() = RegEx.Split(dateString, pattern) MsgBox("Bye")

El msgbox "Hola" aparece, pero el msgbox "Bye" nunca sale, y los códigos más abajo no parecen ser eliminados en absoluto, lo que llevó a sospechar que RegEx.Split está causando que se atasque.

¿Puedo verificar si realmente estoy usando RegEx.Split de la manera correcta? Según MSDN here , Split (String, String) también devuelve una matriz de cadenas.

¡Gracias!

Editar : Estoy tratando de no explorar la función CDate () ya que estoy tratando de no depender de la configuración regional de la computadora del usuario.


Citando un ejemplo de la documentación de VbScript Regexp: https://msdn.microsoft.com/en-us/library/y27d2s18%28v=vs.84%29.aspx

Function SubMatchTest(inpStr) Dim retStr Dim oRe, oMatch, oMatches Set oRe = New RegExp '' Look for an e-mail address (not a perfect RegExp) oRe.Pattern = "(/w+)@(/w+)/.(/w+)" '' Get the Matches collection Set oMatches = oRe.Execute(inpStr) '' Get the first item in the Matches collection Set oMatch = oMatches(0) '' Create the results string. '' The Match object is the entire match - [email protected] retStr = "Email address is: " & oMatch & vbNewLine '' Get the sub-matched parts of the address. retStr = retStr & "Email alias is: " & oMatch.SubMatches(0) '' dragon retStr = retStr & vbNewLine retStr = retStr & "Organization is: " & oMatch.SubMatches(1) '' xyzzy SubMatchTest = retStr End Function

Para probar, llame al:

MsgBox(SubMatchTest("Please send mail to [email protected]. Thanks!"))

En resumen, necesita que su Patrón coincida con las diversas partes que desea extraer, con los separadores intermedios, tal vez algo como:

"(/d+)[/-,](/d+)[/-,](/d+)"

Todo estará en oMatch, mientras que los números (/ d) terminarán en oMatch.SubMatches (0) a oMatch.SubMatches (2).


Para dividir una cadena con una expresión regular en VBA:

Public Function SplitRe(Text As String, Pattern As String, Optional IgnoreCase As Boolean) As String() Static re As Object If re Is Nothing Then Set re = CreateObject("VBScript.RegExp") re.Global = True re.MultiLine = True End If re.IgnoreCase = IgnoreCase re.Pattern = Pattern SplitRe = Strings.Split(re.Replace(text, ChrW(-1)), ChrW(-1)) End Function

Ejemplo de uso:

Dim v v = SplitRe("a,b/c;d", "[,;/]")