Cú pháp chung:
strFunctionName(string, locale)
Argument:
Usage
library(stringr)
#convert to uppercase
str_to_upper("Pham Dinh Khanh")
## [1] "PHAM DINH KHANH"
#convert to lowercase
str_to_lower("PHAM DINH KHANH")
## [1] "pham dinh khanh"
#convert to title
str_to_title("PHAM DINH KHANH")
## [1] "Pham Dinh Khanh"
muốn biết các kiểu locale mà stringr hỗ trợ
library(tidyverse)
library(stringi)
stringi::stri_locale_list() %>% head()
## [1] "af" "af_NA" "af_ZA" "agq" "agq_CM" "ak"
numbers <- "1 and 2 and 4 and 456"
#Xác định vị trí đầu tiên là số
str_locate(numbers, "[0-9]+")[[1]]
## [1] 1
#Xác định các vị trí là số
num_loc <- str_locate_all(numbers, "[0-9]+")[[1]]
num_loc
## start end
## [1,] 1 1
## [2,] 7 7
## [3,] 13 13
## [4,] 19 21
#Extract ra các số
str_sub(numbers,num_loc[,"start"],num_loc[,"end"])
## [1] "1" "2" "4" "456"
#invert_match() sử dụng để lấy các vị trí còn lại của num_loc
text_loc <- invert_match(num_loc)
#Extract các kí tự không là số
str_sub(numbers,text_loc[,"start"],text_loc[,"end"])
## [1] "" " and " " and " " and " ""
#Chúng ta có một list trong đó có lẫn địa chỉ gmail
emailList <- c("phamdinhkhanh93@gmail.com","1231","nguyenvana@gmail.com","dktram@gmail.com","1993 boy")
#Để lọc gmail trong list trên trước tiên phải tạo pattern cho gmail.
pattern <- "@gmail.com"
#pattern trên là chứa chuỗi kí tự @gmail.com
#xác định kiểu pattern trên
str_detect(emailList,pattern)
## [1] TRUE FALSE TRUE TRUE FALSE
#Lấy ra các email
emailList <- str_subset(emailList,pattern)
emailList
## [1] "phamdinhkhanh93@gmail.com" "nguyenvana@gmail.com"
## [3] "dktram@gmail.com"
#Lấy ra các phần là số
str_extract("phamdinhkhanh93@gmail.com","[0-9]+")
## [1] "93"
Có thể tham khảo thêm ở link sau các hàm của stringr
[0-9] : biểu thị kiểu pattern là số từ 0-9. Nếu muốn lấy các số từ 2-5 thì truyền parttern [2-5].
[^0-9] : không phải là các kí tự là số.
’[a-z]: chỉ lấy chữ thường.
’[A-Z]: chỉ lấy chữ hoa.
’[^a-z]: không lấy chữ thường.
’[^A-Z]: không lấy chữ hoa.
’[a-zA-z]: các kí tự là chữ cái gồm chữ thường và chữ hoa
.: kí tự đơn không bao gồm dấu chấm câu và xuống dòng.
library(stringr)
#thay cac so bang rong
str_replace_all("abc123","[0-9]","")
## [1] "abc"
#chi thay so tu 1 den 2
str_replace_all("abc123","[1-2]","")
## [1] "abc3"
#loai cac ki tu khong phai la so
str_replace_all("abc123","[^0-9]","")
## [1] "123"
#loai cac ki tu la chu thuong
str_replace_all("abcABC123","[a-z]","")
## [1] "ABC123"
#loai cac ki tu khong phai chu hoa
str_replace_all("abcABC123","[A-Z]","")
## [1] "abc123"
#loai cac ki tu vua la chu hoa vua la chu thuong
str_replace_all("abcABC123","[a-zA-Z]","")
## [1] "123"
#loai cac ki tu khong la chu thuong
str_replace_all("abcABC123","[^a-z]","")
## [1] "abc"
#loai cac ki tu khong la chu hoa
str_replace_all("abcABC123","[^A-Z]","")
## [1] "ABC"
#loai chu hoac so khong in hoa
str_replace_all("abcABC123","[a-z|0-9]","")
## [1] "ABC"
#loai cac chu so
str_replace_all("abcABC123","[.123]","")
## [1] "abcABC"
[0-9]{2}: 2 chữ số đứng cạnh nhau. Nếu muốn 3 chữ số đứng cạnh nhau thì [0-9]{3}.
[a-z]{2}: 2 chữ cái đứng cạnh nhau
#tim ki tu co 2 chu cai dung canh nhau
str_extract_all("ab123c567","[a-z]{2}")
## [[1]]
## [1] "ab"
#tim ki tu co 3 chu so dung canh nhau
str_extract_all("ab123c56d","[0-9]{3}")
## [[1]]
## [1] "123"
$: pattern xuất hiện ở cuối cùng.
^: pattern xuất hiện đầu tiên.
emailList <- c("phamdinhkhanh93@gmail.com","1231","nguyenvana@gmail.com","dktram@gmail.com","1993 boy")
#tìm chuỗi kí tự xuất hiện ở cuối cùng là com
str_subset(emailList,"com$")
## [1] "phamdinhkhanh93@gmail.com" "nguyenvana@gmail.com"
## [3] "dktram@gmail.com"
#tìm chuỗi kí tự xuất hiện đầu tiên là số
str_subset(emailList,"^[0-9]")
## [1] "1231" "1993 boy"
. : Tìm một kí tự đơn lẻ.
\d: Tìm một chữ số.
\D: Tìm một kí tự không phải chữ số.
\w: Tìm một kí tự là chữ và số
\W: Tìm một kí tự không là chữ và số.
\s: Tìm 1 khoảng trắng.
\S: Tìm 1 kí tự không là khoảng trắng.
\b: TÌm một kí tự tại vị trí đầu và cuối của từ.
\B: TÌm một kí tự không phải là vị trí đầu và cuối của từ.
\0: TÌm một kí tự null
\n: TÌm kí hiệu newline
#lay ki tu don le
str_extract_all("abc d 12 f",".")
## [[1]]
## [1] "a" "b" "c" " " "d" " " "1" "2" " " "f"
#lay ki tu don le co space o phia truoc
str_extract_all("abc d 12 f","\\s.")
## [[1]]
## [1] " d" " 1" " f"
#lay tat ca cac chu so
str_extract_all("abcABC123","\\d")
## [[1]]
## [1] "1" "2" "3"
#lay ki tu khong la chu so
str_extract_all("abcABC123","\\D")
## [[1]]
## [1] "a" "b" "c" "A" "B" "C"
#lay tat ca ki tu la chu
str_extract_all("abc ABC @ 123","\\w")
## [[1]]
## [1] "a" "b" "c" "A" "B" "C" "1" "2" "3"
#lay ki tu khong la khong la chu
str_extract_all("abc ABC @ 123","\\W")
## [[1]]
## [1] " " " " "@" " "
#lay ki tu khong la khoang trang
str_extract_all("abc ABC @ 123","\\S")
## [[1]]
## [1] "a" "b" "c" "A" "B" "C" "@" "1" "2" "3"
#thay the ki hieu newline bang dau -
str_replace_all("cong hoa xa hoi chu nghia Viet Nam
Doc lap tu do hanh phuc","\\n","-")
## [1] "cong hoa xa hoi chu nghia Viet Nam- Doc lap tu do hanh phuc"
n+: TÌm vị trí có ít nhất một kí hiệu n
n*: TÌm vị trí chứa 0 hoặc nhiều lần xuất hiện n
n?: TÌm vị trí chứa 0 hoặc 1 lần xuất hiện n
^n: Khớp bất kì kí tự nào nếu n xuất hiện ở đầu tiên.
#lay cac ki tu chua it nhat 1 ki tu a
str_extract_all("aaabcda 123","a+")
## [[1]]
## [1] "aaa" "a"
#lay cac ki tu 0 hoac nhieu lan xuat hien a
str_extract_all("aaabcda 123","a*")
## [[1]]
## [1] "aaa" "" "" "" "a" "" "" "" "" ""
#lay cac ki tu 0 hoac 1 lan xuat hien a
str_extract_all("aaabcda 123","a?")
## [[1]]
## [1] "a" "a" "a" "" "" "" "a" "" "" "" "" ""
#lay cac ki tu co a xuat hien o dau tien
str_extract_all(c("aaabcda 123","dfa","ab","ahihihi"),"^a")
## [[1]]
## [1] "a"
##
## [[2]]
## character(0)
##
## [[3]]
## [1] "a"
##
## [[4]]
## [1] "a"
#tao mot choi co so dien thoai (co the ngan cach voi nhau boi dau -,+ hoac khong)
strings <- c(" 219+733 8965", "329-293-8753 ", "banana", "595 794 7569",
"387 287 6718", "apple", "233.398.9187 ", "482 952 3315",
"239 923 8115 and 842 566 4692", "Work: 579-499-7527", "$1000",
"Home: 543.355.3679")
#tao kieu cho phone co the cach nhau boi dau -,+ hoac khong
phone <- "([2-9][0-9]{2})[- +.]([0-9]{3})[- .]([0-9]{4})"
str_extract(strings,phone)
## [1] "219+733 8965" "329-293-8753" NA "595 794 7569"
## [5] "387 287 6718" NA "233.398.9187" "482 952 3315"
## [9] "239 923 8115" "579-499-7527" NA "543.355.3679"