Obs: Antes de postar minha dúvida,
recebi uma sugestão de que este Link para responder minha dúvida, verifiquei e não funciona .
Porque há mais de um valor de entrada do usuário em nosso sistema de banco de dados (posteriormente exportado para uma planilha Excel).
Portanto, a entrada manual do padrão de multiplicação pelos usuários é diferente a cada vez.
exemplo 1: "3 x2"
exemplo 2: "4x 8"
exemplo 3: "6 x 10"
como você notará, pode haver um espaço entre o caractere "X" e os dígitos em uma posição diferente a cada vez.
Como minha experiência com expressões regulares está nos estágios iniciais,
criei três funções para lidar com cada exemplo acima e elas funcionam respectivamente corretamente como deveriam.
Porém, procuro combinar essas funções em uma função (se for possível) para facilitar o uso.
Desde já, muito obrigado pela sua ajuda.
Valores Atuais | resultado esperado |
---|---|
Por último a injeção 3x2 | Última injeção 3x2 |
Última injeção 4x8 | Última injeção 4x8 |
Última injeção 6 x 10 | Última injeção 6x10 |
Function Remove_Space_between_Digit_X(ByVal str As String) As String
Static reg As New RegExp
reg.Global = True
reg.IgnoreCase = True
reg.Pattern = "(\s[0-9]+)(\s)(x)"
Remove_Space_between_Digit_X = re.Replace(str, "$1$3")
End Function
Function Remove_Space_between_X_Digit(ByVal str As String) As String
Static reg As New RegExp
reg.Global = True
reg.IgnoreCase = True
reg.Pattern = "(x)(\s)([0-9]+)(\s)"
Remove_Space_between_X_Digit = reg.Replace(str, "$1$3$4")
End Function
Function Remove_Space_around_X_Digit(ByVal str As String) As String
Static reg As New RegExp
reg.Global = True
reg.IgnoreCase = True
reg.Pattern = "([0-9])+(\s)(x)(\s)([0-9]+)(\s)"
Remove_Space_around_X_Digit = reg.Replace(str, "$1$3$5$6")
End Function
Você pode usar esta regex:
que irá corresponder:
(\d)
: um dígito (capturado no grupo 1)\s*x\s*
: umx
cercado por um certo número de espaços(\d)
: um dígito (capturado no grupo 2)e substitua-o por
$1x$2
para remover quaisquer espaços na string.Demonstração em regex101
Em VBA:
Observação
No interesse da simplicidade, o regex não é tão rigoroso quanto poderia ser; também corresponderá a algo como
a4 x 3b
. Se isso puder ser um problema, use:que usa quebras de palavras e corresponde a vários dígitos para garantir que corresponda apenas a multiplicações de números.
Demonstração Regex em regex101
4 * 5
ou2 + 4
. Na 2ª opção, você precisa modificaraKey
conforme necessário.x
for o único operador entre dois números, você pode fazer isso sem RegExp.Se bem entendi, você quer pegar:
quaisquer dois números com apenas um único "x" e zero ou mais espaços ao redor do "x"
...e converta isso para:
os dois números originais com um "x" explícito entre eles.
Esta expressão regular corresponde a todos os casos que você forneceu, bem como a algo como "7x23" (sem espaços).
Significado:
O padrão regex de substituição é simplesmente:
Significado:
Com base no seu código de exemplo, presumo que sua string de substituição seria:
--klode