Leapfrogging từ câu hỏi trước, tôi gặp sự cố với cú pháp biểu thức chính xác thích hợp để tách riêng một từ cụ thể.Trích xuất một từ cụ thể bằng gsub và regex
Cho một khung dữ liệu:
DL<-c("Dark_ark","Light-Lis","dark7","DK_dark","The_light","Lights","Lig_dark","D_Light")
Col1<-c(1,12,3,6,4,8,2,8)
DF<-data.frame(Col1)
row.names(DF)<-DL
Tôi đang tìm chiết xuất tất cả các "Dark" và "Ánh sáng" (bỏ qua trên vs chữ thường) từ những cái tên hàng và thực hiện một cột thứ hai chỉ chứa các chuỗi "Dark" hoặc "Light"
Col2<-c("Dark","Light","dark","dark","light","Light","dark","Light")
DF$Col2<-Col2
Col1 Col2
Dark_ark 1 Dark
Light-Lis 12 Light
dark7 3 dark
DK_dark 6 dark
The_light 4 light
Lights 8 Light
Lig_dark 2 dark
D_Light 8 Light
Ive thay đổi dữ liệu gốc một chút đến từng chi tiết vấn đề hiện tại của tôi, nhưng làm việc của một câu trả lời tuyệt vời từ Tyler Rinker, tôi sử dụng này:
DF$Col2<-gsub("[^dark|light]", "", row.names(DF), ignore.case = TRUE)
Nhưng gsub bị vấp phải trên một số chữ cái chung. Tìm kiếm trên bảng tin để cô lập một từ chính xác với regex, có vẻ như câu trả lời nên được sử dụng dấu gạch chéo kép với một trong hai
\\<light\\>
hoặc
\\blight\\b
Vì vậy, tại sao dòng
DF$Col2<-gsub("[^\\<dark\\>|\\<light\\>]", "", row.names(DF), ignore.case = TRUE)
Không kéo cột mong muốn ở trên? Thay vào đó, tôi nhận được
Col1 Col2
Dark_ark 1 Darkark
Light-Lis 12 LightLi
dark7 3 dark
DK_dark 6 DKdark
The_light 4 Thlight
Lights 8 Light
Lig_dark 2 Ligdark
D_Light 8 DLight
Không ai sẽ trả lời một câu hỏi regex nếu nó không phải là [ssce] (http://sscce.org) – aaronman
Đầu tiên, '\\ b' được sử dụng để xác định ranh giới từ. Vì vậy, bạn sẽ phải cho biết chuỗi chính xác ở giữa. Bạn không thể phủ nhận nó afaiu. Thứ hai, nó sử dụng dấu cách và dấu chấm câu để tìm ranh giới ... và '_' không phải là một trong số chúng. – Arun