2013-01-10 7 views
56

में वर्ण का स्थान ढूंढें मैं एक स्ट्रिंग में किसी वर्ण का स्थान ढूंढना चाहता हूं।स्ट्रिंग

कहते हैं: string = "the2quickbrownfoxeswere2tired"

मैं समारोह 4 और 24 वापस जाने के लिए चाहते हैं - string में 2 के चरित्र स्थान।

+0

रेगेक्स का उपयोग क्यों करें? क्या आर 'indexOf() 'या कुछ नहीं है? – fge

+0

मुझे शक है। डेवलपर्स निक्सर थे और माना कि सभी को रेगेक्स पता था। आर की स्ट्रिंग हैंडलिंग एक प्रकार की क्लीडी है। –

उत्तर

79

आप उपयोग कर सकते हैं gregexpr

gregexpr(pattern ='2',"the2quickbrownfoxeswere2tired") 


[[1]] 
[1] 4 24 
attr(,"match.length") 
[1] 1 1 
attr(,"useBytes") 
[1] TRUE 

या शायद पैकेज stringr से str_locate_all जो

library(stringr) 
str_locate_all(pattern ='2', "the2quickbrownfoxeswere2tired") 

[[1]] 
    start end 
[1,]  4 4 
[2,] 24 24 

टिप्पणी है कि आप केवल इस्तेमाल कर सकते हैं (stringr संस्करण 1.0 के रूप में) के लिए gregexprstringi::stri_locate_all एक आवरण है stringi

library(stringi) 
stri_locate_all(pattern = '2', "the2quickbrownfoxeswere2tired", fixed = TRUE) 

आधार R में एक अन्य विकल्प की तरह

lapply(strsplit(x, ''), function(x) which(x == '2')) 

काम करना चाहिए कुछ (दिए गए एक चरित्र वेक्टर x)

+0

हम आपके पहले 3 समाधानों द्वारा लौटाई गई सूचियों/ऑब्जेक्ट्स से पूर्णांक कैसे निकाल सकते हैं? –

26

यहाँ एक और सरल विकल्प है किया जाएगा।

> which(strsplit(string, "")[[1]]=="2") 
[1] 4 24 
10

तुम सिर्फ 4 और 24 असूचीबद्ध का उपयोग कर उत्पादन कर सकते हैं:

unlist(gregexpr(pattern ='2',"the2quickbrownfoxeswere2tired")) 
[1] 4 24 
0

str1 में str2 के n वें घटना (Oracle SQL INSTR के रूप में मानकों को उसी क्रम में) की स्थिति का पता लगाने, रिटर्न 0 यदि नहीं मिला

instr <- function(str1,str2,startpos=1,n=1){ 
    aa=unlist(strsplit(substring(str1,startpos),str2)) 
    if(length(aa) < n+1) return(0); 
    return(sum(nchar(aa[1:n])) + startpos+(n-1)*nchar(str2)) 
} 


instr('xxabcdefabdddfabx','ab') 
[1] 3 
instr('xxabcdefabdddfabx','ab',1,3) 
[1] 15 
instr('xxabcdefabdddfabx','xx',2,1) 
[1] 0