Thay thế văn bản
Thuộc phần Logic và luồng điều khiển trong hành trình R của Coddy. Bài học 5 trên 64.
sub(pattern, replacement, x) thay thế kết quả khớp đầu tiên trong mỗi chuỗi, còn gsub() thay thế mọi kết quả khớp. Cũng như grepl(), fixed = TRUE xem mẫu là văn bản thuần.
date <- "2024-01-15"
print(sub("-", "/", date, fixed = TRUE))
print(gsub("-", "/", date, fixed = TRUE))Đầu ra:
[1] "2024/01-15"
[1] "2024/01/15"Thay thế bằng chuỗi rỗng sẽ xóa các phần khớp. Cách này làm sạch văn bản trước khi chuyển đổi thành số:
price <- "$1,299.00"
clean <- gsub(",", "", sub("$", "", price, fixed = TRUE), fixed = TRUE)
print(clean)
print(as.numeric(clean) * 2)Đầu ra:
[1] "1299.00"
[1] 2598Không có fixed = TRUE thì mẫu là một biểu thức chính quy. Có hai thành phần hữu ích: [0-9] khớp với bất kỳ chữ số nào, còn + lặp lại thành phần đứng trước nó một hoặc nhiều lần, vì vậy " +" khớp với một dãy dấu cách.
msg <- "call me at 555 0199"
print(gsub(" +", " ", msg))
print(gsub("[0-9]", "#", msg))Đầu ra:
[1] "call me at 555 0199"
[1] "call me at ### ####"Giống như các hàm xử lý chuỗi khác, sub() và gsub() hoạt động trên mọi phần tử của một vector:
codes <- c("a-1", "b-22", "c-3")
print(gsub("-", "", codes, fixed = TRUE))
print(sub("-[0-9]+", "", codes))Đầu ra:
[1] "a1" "b22" "c3"
[1] "a" "b" "c"Thử thách
DễHoàn thành slugify(title). Trả về tiêu đề ở dạng chữ thường, không có khoảng trắng ở đầu hoặc cuối và thay mỗi dãy khoảng trắng bằng một -: Hello World trở thành hello-world.
Đoạn code được cung cấp đọc tiêu đề và in ra giá trị trả về.
Tự làm thử
slugify <- function(title) {
# Viết code của bạn ở đây
title
}
# Đoạn code đầu vào/đầu ra có sẵn: giữ nguyên
input <- suppressWarnings(readLines(file("stdin")))
cat(slugify(input[1]), sep = "\n")
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Logic và luồng điều khiển
1Chuỗi chuyên sâu
Chuỗi con với substr()Định dạng với sprintf()Tách và nối chuỗiTìm kiếm trong chuỗiThay thế văn bảnÔn tập: Tạo tên người dùng10Luồng điều khiển nâng cao
Hàm switch()ifelse() dạng vector hóarepeat và breakHàm đệ quyÔn tập: phân loại điểmTự luyện tập: Trình biên dịch R online