Stavo cercando di rispondere a una domanda (che in seguito è stata cancellata) che penso stia chiedendo di estrarre rappresentazioni testuali di notazione scientifica. (Utilizzando l'implementazione di re di un'espressione regolare che richiede doppie escape per i meta-caratteri e può essere utilizzata in modalità puro PCRE o Perl, la differenza tra le quali non capisco davvero.) Ho risolto la maggior parte del compito ma sembra ancora non riuscire a catturare il segno meno negativo all'interno di un gruppo di cattura. L'unico modo mi sembra di farlo per avere successo è quello di utilizzare il leader open-parentesi:Come acquisire il segno meno nella notazione scientifica con regex?
> txt <- c("this is some random text (2.22222222e-200)", "other random (3.33333e4)", "yet a third(-1.33333e-40)", 'and a fourth w/o the "e" (2.22222222-200)')
> sub("^(.+\\()([-+]{0,1}[0-9][.][0-9]{1,16}[eE]*[-+]*[0-9]{0,3})(.+$)", "\\2" ,txt)
[1] "2.22222222e-200" "3.33333e4" "-1.33333e-40" "2.22222222-200"
> sub("^(.+\\()([-+]?[0-9][.][0-9]{1,16}[eE]*[-+]*[0-9]{0,3})(.+$)", "\\2" ,txt)
[1] "2.22222222e-200" "3.33333e4" "-1.33333e-40" "2.22222222-200"
#but that seems to be "cheating" ... my failures follow:
> sub("^(.+)([-+]?[0-9][.][0-9]{1,16}[eE]*[-+]*[0-9]{0,3})(.+$)", "\\2" ,txt)
[1] "2.22222222e-200" "3.33333e4" "1.33333e-40" "2.22222222-200"
> sub("^(.+)(-?[0-9][.][0-9]{1,16}[eE]*[-+]*[0-9]{0,3})(.+$)", "\\2" ,txt)
[1] "2.22222222e-200" "3.33333e4" "1.33333e-40" "2.22222222-200"
> sub("^(.+)(-*[0-9][.][0-9]{1,16}[eE]*[-+]*[0-9]{0,3})(.+$)", "\\2" ,txt)
[1] "2.22222222e-200" "3.33333e4" "1.33333e-40" "2.22222222-200"
ho cercato SO per quanto di mia pazienza con termini come `notazione scientifica regex meno
È possibile aggiornare alla domanda per mostrare chiaramente l'input iniziale e l'output desiderato? –
La domanda crea il vettore di caratteri di input come input usando il codice R, e ho postato due risposte corrette che si basavano sul metodo che ho chiamato "barare". Non so come potrebbe essere più riproducibile –
@TimBiegeleisen Negli ultimi tre '" 1.33333e-40 "' è diverso – akrun