Menu
CoddyTech

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] 2598

Khô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"
challenge icon

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")
quiz iconTự kiểm tra

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

Tự luyện tập: Trình biên dịch R online