Tôi muốn tìm vị trí của một ký tự trong một chuỗi.tìm vị trí của ký tự trong chuỗi
nói: string = "the2quickbrownfoxeswere2tired"
Tôi muốn các chức năng để trở 4
và 24
- vị trí nhân vật của 2
s trong string
.
Tôi muốn tìm vị trí của một ký tự trong một chuỗi.tìm vị trí của ký tự trong chuỗi
nói: string = "the2quickbrownfoxeswere2tired"
Tôi muốn các chức năng để trở 4
và 24
- vị trí nhân vật của 2
s trong string
.
Bạn có thể sử dụng gregexpr
gregexpr(pattern ='2',"the2quickbrownfoxeswere2tired")
[[1]]
[1] 4 24
attr(,"match.length")
[1] 1 1
attr(,"useBytes")
[1] TRUE
hoặc có lẽ str_locate_all
từ gói stringr
mà là một wrapper cho gregexpr
stringi::stri_locate_all
(tính stringr
phiên bản 1,0)
library(stringr)
str_locate_all(pattern ='2', "the2quickbrownfoxeswere2tired")
[[1]]
start end
[1,] 4 4
[2,] 24 24
lưu ý rằng bạn chỉ có thể sử dụng stringi
library(stringi)
stri_locate_all(pattern = '2', "the2quickbrownfoxeswere2tired", fixed = TRUE)
Một tùy chọn khác trong cơ sở R
sẽ là một cái gì đó giống như
lapply(strsplit(x, ''), function(x) which(x == '2'))
nên làm việc (cho một vector nhân vật x
)
làm thế nào chúng ta có thể trích xuất các số nguyên từ các danh sách/đối tượng được trả về bởi 3 giải pháp đầu tiên của bạn? –
Đây là một sự thay thế đơn giản.
> which(strsplit(string, "")[[1]]=="2")
[1] 4 24
Bạn có thể làm cho sản lượng chỉ 4 và 24 sử dụng không công khai:
unlist(gregexpr(pattern ='2',"the2quickbrownfoxeswere2tired"))
[1] 4 24
tìm ra vị trí của sự xuất hiện thứ n của str2 trong str1 (cùng thứ tự của các thông số như Oracle SQL INSTR), trả về 0 nếu không tìm thấy
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
Tại sao lại sử dụng regex? Không r có '.indexOf()' hay gì đó? – fge
Tôi nghi ngờ điều đó. Các nhà phát triển là Nixers và giả định mọi người đều biết regex. Xử lý chuỗi R là loại kludgy. –