capture groups (parantez) ve bir dize içeren düzenli bir ifade verildiğinde, yakalama grupları ile eşleşen alt dizeleri, yani elde edebilirim, örneğin "\ 1", " \ 2" ?Ekstraksiyon yakalama grubu normal ifadelerden eşleşiyor mu? (veya: gregexec nerede?)
Örnek:
s <- "xy1234wz98xy567"
r <- "xy(\\d+)"
İstenilen sonuç: "xy" öncesinde regex yakalama basamak dikkate
[1] "1234" "567"
İlk girişimi: gregexpr
: Ben istediğini değil
regmatches(s,gregexpr(r,s))
#[[1]]
#[1] "xy1234" "xy567"
Çünkü tüm desenle eşleşen alt dizeleri döndürür.
İkinci deneyin: regexec
:
regmatches(s,regexec("xy(\\d+)",s))
#[[1]]
#[1] "xy1234" "1234"
değil o sadece Tüm örneğin ve yakalama grubu için eşleştirme Birinci oluşumu döndürdüğü için ne istiyorum. regexpr
uzanır regexec
gregexpr
olarak uzanan gregexec
işlevi varsa
, benim sorunum çözülmüş olurdu.
Yani soru şudur: rasgele bir normal ifadede yakalama gruplarını eşleştiren tüm alt dizeleri (veya yukarıdaki örneklerde olduğu gibi regmatches
geçirilebilen dizinler) nasıl alınır?
Not: Yukarıda verilen r
için desen sadece aptalca bir örnektir, keyfi kalmalıdır. Burada baz bunu hakkında emin değil, ama
Bu tam da ihtiyacım olan şey. Kaynağını kontrol edeceğim. Bunun temel bir görev olduğu göz önüne alındığında, baz R'de bir çözümün (ya da olması gerektiğine) inanıyorum. –
Sadece "lapply" ve "regexec" (akıllıca olsa) kullanır ... Sadece şunu yazın: 'str_match_all' ve 'str_match' bunu görmek için ... – Arun