Tôi có một tệp dữ liệu chứa một cột văn bản chứa tên tệp. Tôi muốn trả lại tên tệp mà không có đường dẫn hoặc phần mở rộng của tệp. Thông thường, tên tệp của tôi đã được đánh số, nhưng chúng không nhất thiết phải như vậy. Ví dụ:Tên tệp trả về Regex, xóa đường dẫn và phần mở rộng tệp
df<-data.frame(data=c("a","b"),fileNames=c("C:/a/bb/ccc/NAME1.ext","C:/a/bb/ccc/d D2/name2.ext"))
Tôi muốn quay trở lại tương đương với
df<-data.frame(data=c("a","b"),fileNames=c("NAME","name"))
nhưng tôi không thể tìm ra các biểu thức chính quy trơn để làm điều này với gsub. Ví dụ, tôi có thể thoát khỏi phần mở rộng với (được cung cấp tên tập tin kết thúc bằng một số):
gsub('([0-9]).ext','',df[,"fileNames"])
Mặc dù tôi đã cố gắng mô hình khác nhau (bằng cách đọc các tập tin regex giúp đỡ và giải pháp tương tự trên trang web này), Tôi không thể có được một regex để trả lại văn bản giữa "/" cuối cùng và "." Đầu tiên. Bất kỳ suy nghĩ hoặc chuyển tiếp đến các câu hỏi tương tự được nhiều đánh giá cao!
Điều tốt nhất tôi đã nhận được là:
gsub('*[[:graph:]_]/|*[[:graph:]_].ext','',df[,"fileNames"])
Nhưng 1 này) không thoát khỏi tất cả các nhân vật con đường dẫn và 2) là phụ thuộc vào một phần mở rộng tập tin cụ thể.
Cách tiếp cận thú vị. Đối với tôi, cách tiếp cận này rõ ràng hơn so với regex, điều này hiện đang gây nhầm lẫn cho tôi. Tôi sẽ thử. – Docuemada
Điều này hoạt động tốt, cảm ơn bạn. Nó có ý nghĩa hơn với tôi, nhưng đó có lẽ là vì tôi cần luyện tập nhiều hơn với regex! – Docuemada
@Docuemada, không sao cả. Như được hiển thị, 'file_path_sans_ext' là một biểu thức chính quy cơ bản, vì tôi nghi ngờ' basename' là (nhưng chưa được kiểm tra để xác minh). – A5C1D2H2I1M1N2O1R2T1