Tôi đã cố gắng trả lời một câu hỏi (mà sau này đã bị xóa) mà tôi nghĩ đã hỏi về việc trích xuất các văn bản đại diện của ký pháp khoa học. (Sử dụng việc thực hiện regex của R yêu cầu thoát kép cho các ký tự meta và có thể được sử dụng ở chế độ PCRE hoặc Perl thuần túy, sự khác biệt giữa chúng tôi không thực sự hiểu rõ.) Tôi đã giải quyết hầu hết các nhiệm vụ nhưng dường như vẫn còn không thể ghi lại dấu trừ hàng đầu trong nhóm chụp. Cách duy nhất tôi dường như để làm cho nó thành công là sử dụng hàng đầu mở ngoặc:Làm thế nào để ghi lại dấu trừ trong ký pháp khoa học với regex?
> txt <- c("this is some random text (2.22222222e-200)", "other random (3.33333e4)", "yet a third(-1.33333e-40)", 'and a fourth w/o the "e" (2.22222222-200)')
> sub("^(.+\\()([-+]{0,1}[0-9][.][0-9]{1,16}[eE]*[-+]*[0-9]{0,3})(.+$)", "\\2" ,txt)
[1] "2.22222222e-200" "3.33333e4" "-1.33333e-40" "2.22222222-200"
> sub("^(.+\\()([-+]?[0-9][.][0-9]{1,16}[eE]*[-+]*[0-9]{0,3})(.+$)", "\\2" ,txt)
[1] "2.22222222e-200" "3.33333e4" "-1.33333e-40" "2.22222222-200"
#but that seems to be "cheating" ... my failures follow:
> sub("^(.+)([-+]?[0-9][.][0-9]{1,16}[eE]*[-+]*[0-9]{0,3})(.+$)", "\\2" ,txt)
[1] "2.22222222e-200" "3.33333e4" "1.33333e-40" "2.22222222-200"
> sub("^(.+)(-?[0-9][.][0-9]{1,16}[eE]*[-+]*[0-9]{0,3})(.+$)", "\\2" ,txt)
[1] "2.22222222e-200" "3.33333e4" "1.33333e-40" "2.22222222-200"
> sub("^(.+)(-*[0-9][.][0-9]{1,16}[eE]*[-+]*[0-9]{0,3})(.+$)", "\\2" ,txt)
[1] "2.22222222e-200" "3.33333e4" "1.33333e-40" "2.22222222-200"
Tôi đã tìm kiếm SO đến mức kiên nhẫn của tôi với các điều khoản như `ký hiệu khoa học regex trừ
Bạn có thể cập nhật câu hỏi của mình để hiển thị rõ ràng đầu vào bắt đầu và đầu ra mong muốn không? –
Câu hỏi tạo ra vector ký tự đầu vào làm đầu vào bằng cách sử dụng mã R và tôi đã đăng hai câu trả lời đúng dựa trên phương pháp tôi gọi là "gian lận". Tôi không biết làm thế nào nó có thể được tái tạo hơn nữa –
@TimBiegeleisen Trong ba "1.33333e-40" 'khác nhau – akrun