স্ট্রিংয়ে একটি অক্ষরের অবস্থান সন্ধান করুন


88

আমি একটি স্ট্রিংয়ে একটি চরিত্রের অবস্থান সন্ধান করতে চাই।

বলুন: string = "the2quickbrownfoxeswere2tired"

আমি ফাংশনটি ফিরে আসার 4এবং 24- এর অক্ষরের অবস্থানটি 2চাই string


কেন একটি রেজেক্স ব্যবহার? R এর একটি .indexOf()বা কিছু নেই?
10:43

4
আমি এটাকে সন্দেহ করি. বিকাশকারীরা নিক্সার ছিলেন এবং ধরে নিয়েছিলেন প্রত্যেকেই রেজেক্স জানতেন। আর এর স্ট্রিং হ্যান্ডলিং এক ধরণের ক্লডজি।
আইআরটিএফএম

উত্তর:


116

তুমি ব্যবহার করতে পার gregexpr

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


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

অথবা সম্ভবত str_locate_allপ্যাকেজ থেকে stringrযা র‍্যাপার ( সংস্করণ 1.0 হিসাবে )gregexpr stringi::stri_locate_allstringr

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

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

আপনি সহজভাবে ব্যবহার করতে পারে তা নোট করুন stringi

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

বেসে আরও একটি বিকল্প Rকিছু হবে

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

কাজ করা উচিত (একটি চরিত্রের ভেক্টর দেওয়া হয়েছে x)


আপনার প্রথম 3 টি সমাধান থেকে ফিরে আসা তালিকা / বস্তুগুলি থেকে আমরা সংখ্যাগুলি কীভাবে বের করতে পারি?
পিট

সহজেই পূর্ণসংখ্যার regexprপরিবর্তে ব্যবহার করুন gregexpr। অথবা unlistআউটপুটটিতে নীচের অন্য উত্তরে নির্দেশিত হিসাবে ব্যবহার করুন।
অরণী

43

এখানে আরও একটি সহজ বিকল্প।

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

আপনি কি ব্যাখ্যা করতে পারেন [[1]]?
ফ্র্যাঙ্কোসক্রোল

@ ফ্র্যাঙ্কোইসক্রল, [[1]] তালিকার প্রথম উপাদানটিকে উপস্থাপন করে।
প্রফুল্ল

20

আপনি তালিকাভুক্ত তালিকা ব্যবহার করে আউটপুটটি মাত্র 4 এবং 24 করতে পারেন:

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

3

str1 তে str2 এর নবম সংঘটিতের অবস্থান (ওরাকল এসকিউএল 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

2

শুধুমাত্র জন্য প্রথম স্থান, ব্যবহার lapply()সঙ্গে min():

my_string <- c("test1", "test1test1", "test1test1test1")

unlist(lapply(gregexpr(pattern = '1', my_string), min))
#> [1] 5 5 5

# or the readable tidyverse form
my_string %>%
  gregexpr(pattern = '1') %>%
  lapply(min) %>%
  unlist()
#> [1] 5 5 5

শুধুমাত্র জন্য গত অবস্থানগুলি, ব্যবহার lapply()সঙ্গে max():

unlist(lapply(gregexpr(pattern = '1', my_string), max))
#> [1]  5 10 15

# or the readable tidyverse form
my_string %>%
  gregexpr(pattern = '1') %>%
  lapply(max) %>%
  unlist()
#> [1]  5 10 15

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.