Post by Bruno Campanini"q w-4574,fgh67.83fgh77 afd7mbn 908 125.47abc"
4574 67.83 77 7 908125.47
Separatore di migliaia e di elementi Space(1),
separatore decimale "."
Non sono riuscito a ricevere l'ultimo numero nel
formato in cui si trova nella stringa, cioè coi
separatori mille/decimali.
- copia la stringa di prova in memoria
- apri poweshell
- incollala con un click destro (deve avere le doppie virgolette
all'inizio e alla fine, in questo modo viene vista come oggetto
stringa)
- digita uno spazio e poi incollaci -replace '\D*(\d+(\.\d+)*\D+',"`$1`n"
- puoi selezionare il risultato e premere invio (lo avrai in memoria,
pronto da incollare su foglio)
in alternativa, si può gestire il copincolla anche direttamente da linea
di comando; copi la stringa in memoria (senza virgolette), poi:
gcb | %{$_ -replace '\D*(\d+(\.\d+)*)\D*',"`$1`n"} | scb
avrai in memoria il risultato da incollare dove vuoi.
quando riaprirai powershell, il comando sarà nello storico, basta che
torni ai comandi precedenti con Freccia Su.
il VBA, con commento alla regex utilizzata:
--8<---------------cut here---------------start------------->8---
Function TrovaNumeri(stringa As String) As Variant
Dim numeri As String
Const sep = "."
stringa = Replace(stringa, IIf(sep = ".", ",", "."), "")
With CreateObject("vbscript.regexp")
.Pattern = "\D*(\d+(?:\" & sep & "\d+)?)\D*"
Rem _
\D indica un *non* numerico _
\d indica un numerico _
+ sta per 1 o N precedenti _
* sta per 0 o N precedenti _
? sta per 0 o 1 precedenti _
le () raggruppano una regola e catturano il risultato _
?: all'inizio delle () "spegne" la funzione di cattura.
.Global = True
numeri = .Replace(stringa, "$1 ")
'$1 contengono (opz. global, piu` match possibili) i gruppi catturati.
End With
TrovaNumeri = Split(Trim$(numeri), " ")
End Function
--8<---------------cut here---------------end--------------->8---
late binding, non devi spuntare alcuna libreria.