Опитвах се да отговоря на въпрос (който по-късно беше изтрит), който според мен задаваше относно извличането на текстови представяния на научна нотация. (Използвайки внедряването на регулярни изрази на R, което изисква двойни екрани за мета-символи и може да се използва както в режим PCRE, така и в Perl, разликата между които наистина не разбирам.) Реших по-голямата част от задачата, но все още изглежда не успява да улови водещия знак минус в рамките на група за улавяне. Единственият начин, по който изглежда да го накарам да успее, е като използвам водещата отворена скоба:
> 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"
Търсих SO до степента на моето търпение с термини като „научна нотация регулярен израз минус“
"1.33333e-40"
е различно - person akrun   schedule 03.05.2015str_extract_all
изглежда работиunlist(str_extract_all(txt, '-?[0-9.]+e?[-+]?[0-9]*'))
- person akrun   schedule 03.05.2015numbers
като 161.1.60.40, но това изглежда приемливо. - person IRTFM   schedule 03.05.2015abs()
алтер-его и да изолира негативите въз основа на това сравнение. - person baptiste   schedule 03.05.2015