Bilimsel gösterimin metin gösterimlerini çıkarmayı düşündüğümü düşündüğüm bir soruyu (daha sonra silindi) yanıtlamaya çalışıyordum. (R'nin meta-karakterler için çift kaçış gerektiren regex uygulamalarını kullanarak ve saf PCRE veya Perl modlarında, gerçekten anlamadığım farklar arasında kullanılabilir). Görevin çoğunu çözdüm ama yine de Bir yakalama grubu içinde önde gelen eksi işaretini yakalayamamak.İfade ile bilimsel gösterimde eksi işareti nasıl alınır?
> 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"
ben `bilimsel gösterim regex eksi
Başlangıç girişini ve istenen çıktıyı net bir şekilde göstermek için sorunuzu güncelleyebilir misiniz? –
Soru, giriş karakteri vektörünü R kodu kullanarak girdi olarak yaratır ve "aldatma" adını verdiğim yönteme dayanan iki doğru yanıtı yayınladım. Ben daha fazla reprodüktif olabilir nasıl bilmiyorum –
@TimBiegeleisen Son üç '" 1.33333e-40 "' farklı – akrun