एक अन्य विकल्प नियमित अभिव्यक्ति कार्यों के साथ उप-अभिव्यक्तियों का उपयोग करना है regmatchesऔर regexec।
# the original example
x <- 'hello stackoverflow'
# grab the substrings
myStrings <- regmatches(x, regexec('(^.)(.*)', x))
यह संपूर्ण स्ट्रिंग, पहला वर्ण, और "popped" परिणाम की लंबाई 1 की सूची में देता है।
myStrings
[[1]]
[1] "hello stackoverflow" "h" "ello stackoverflow"
जो के बराबर है list(c(x, substr(x, 1, 1), substr(x, 2, nchar(x))))। यही है, इसमें वांछित तत्वों के साथ-साथ पूर्ण स्ट्रिंग का सुपर सेट शामिल है।
जोड़ना sapplyइस विधि को लंबाई के वर्ण वेक्टर> 1 के लिए काम करने की अनुमति देगा।
# a slightly more interesting example
xx <- c('hello stackoverflow', 'right back', 'at yah')
# grab the substrings
myStrings <- regmatches(x, regexec('(^.)(.*)', xx))
यह पहले तत्व के रूप में मिलान किए गए पूर्ण स्ट्रिंग के साथ एक सूची देता है और ()निम्नलिखित तत्वों के रूप में कैप्चर किए गए मिलान सबटेक्शंस । इसलिए नियमित अभिव्यक्ति में '(^.)(.*)', (^.)पहले चरित्र से (.*)मेल खाता है और शेष पात्रों से मेल खाता है।
myStrings
[[1]]
[1] "hello stackoverflow" "h" "ello stackoverflow"
[[2]]
[1] "right back" "r" "ight back"
[[3]]
[1] "at yah" "a" "t yah"
अब, हम वांछित सबस्ट्रिंग को बाहर निकालने के लिए भरोसेमंद sapply+ [विधि का उपयोग कर सकते हैं ।
myFirstStrings <- sapply(myStrings, "[", 2)
myFirstStrings
[1] "h" "r" "a"
mySecondStrings <- sapply(myStrings, "[", 3)
mySecondStrings
[1] "ello stackoverflow" "ight back" "t yah"