Expressões regulares - Excel - Obter valor correspondente

0

Estou procurando alguns conselhos.

Estou tentando usar expresões regulares no Visual Basic para Excel (referência ao Microsfot VBScript Expresions regulares 5.5 já definido).

Eu só quero que essa função teste meu regex \d\d\d\d\d (para procurar por 5 inteiros consecutivos) e, se for verdade, para fornecer o valor correspondente.

Por exemplo, se eu tiver a string “aaaaa 12345 bbb”, quero que a função dê “12345”. Parece fácil mas… não para mim.

Este é o meu código até agora:

Function EXTRACT_CP(cell_with_text As Range) As String

Dim regEx As New RegExp
Dim strexpresion As String
Dim strInput As String
Dim strReplace As String
Dim strOutput As String

strexpresion = "\d\d\d\d\d"
strInput = UCase(cel_with_text.Value)

  regEx.Pattern = strexpresion

  If regEx.Test(strInput) Then

‘THIS LINE OBVIOUSLY FAILS BUT I DON’T KNOW WHAT TO PUT
        strOutput = regEx.Replace(strInput, "\d\d\d\d\d")

  End If

EXTRACT_CP = strOutput

End Function

Só quero saber como obter o valor correspondente para qualquer regex.

    
por Leonel Quezada 27.11.2015 / 20:39

1 resposta

1

Cinco dígitos consecutivos?

Adicione variáveis:

Dim colMatches As Object
Dim ix As Long
Dim separator As String

Um RegEx válido:

regEx.Pattern = "(\d{5})"

Alterar:

strOutput = regEx.Replace(strInput, "\d\d\d\d\d")

para:

Set colMatches = regEx.Execute(strInput)

e repita a sua única correspondência (\d{5}) ~ colMatches.Item(0) para as submissões:

separator = "|"
strOutput = ""
For ix = 0 to colMatches.Item(0).submatches.count - 1
  strOutput = strOutput + colMatches.Item(0).submatches.Item(ix) + separator

O código é escrito sem um editor do VBA, portanto ajustes podem ser necessários.

    
por 28.11.2015 / 00:11