Stuart Halloway cho ví dụđang Clojure nhỏ gọn cho trận đấu biểu thức chính quy và vị trí của họ trong chuỗi
(re-seq #"\w+" "The quick brown fox")
như phương pháp tự nhiên cho việc tìm kiếm các trận đấu của các trận đấu regex trong Clojure. Trong cuốn sách của mình, công trình này được đối chiếu với sự lặp lại qua một người so khớp. Nếu tất cả mọi người quan tâm là một danh sách các trận đấu thì điều này thật tuyệt vời. Tuy nhiên, nếu tôi muốn các trận đấu và vị trí của họ trong chuỗi? Có cách nào tốt hơn để làm điều này cho phép tôi tận dụng các chức năng hiện có trong java.util.regex với việc sử dụng một cái gì đó giống như một chuỗi hiểu trên mỗi chỉ mục trong chuỗi ban đầu? Nói cách khác, người ta sẽ muốn gõ một cái gì đó giống như
(re-seq-đồ # "[0-9] +" "3a1b2c1d")
mà sẽ trả về một bản đồ với các phím như vị trí và giá trị như các kết quả phù hợp, ví dụ
{0 "3", 2 "1", 4 "2", 6 "1"}
Có một số triển khai thực hiện điều này trong thư viện chưa có hoặc tôi có viết nó (không được quá dòng mã) không?
Cảm ơn Brian. Có lẽ tái pos nên tìm đường vào thư viện regex. –
Tôi có một chút vấn đề với điều này. (re-pos # "ATAT" "GATATATGCATATACTT") phải trả về {9 "ATAT", 3 "ATAT", 1 "ATAT"} nhưng nó trả về {9 "ATAT", 1 "ATAT"}. – boucekv
Nếu bạn muốn đếm các kết quả trùng lặp, hãy thay đổi regex một chút: (re-pos # "(? = (ATAT))" "GATATATGCATATACTT") trả về {9 "", 3 "", 1 ""}. Nếu bạn muốn lấy lại văn bản phù hợp, bạn cần phải làm (.group m 1) thay vì (.group m). –