Stuart Halloway dà l'esempiocodice compatto Clojure per regolare le partite di espressione e la loro posizione nella stringa
(re-seq #"\w+" "The quick brown fox")
come metodo naturale per trovare partite di partite regex in Clojure. Nel suo libro questa costruzione è in contrasto con l'iterazione su un matcher. Se a tutti fosse importato un elenco di partite, sarebbe fantastico. Tuttavia, che cosa succede se volevo corrispondenze e la loro posizione all'interno della stringa? C'è un modo migliore per farlo che mi consente di sfruttare la funzionalità esistente in java.util.regex ricorrendo a qualcosa come una comprensione di sequenza su ogni indice nella stringa originale? In altre parole, si vorrebbe digitare qualcosa come
(ri-Seq-map # "[0-9] +" "3a1b2c1d")
che sarebbe tornato una mappa con tasti come la posizione e i valori come le partite, ad es
{0 "3", 2 "1", 4 "2", 6 "1"}
C'è qualche attuazione del presente in una libreria esistente già o devo scriverlo (non dovrebbe essere troppo may linee di codice)?
Grazie Brian. Forse il re-pos dovrebbe trovare la sua strada nella libreria regex. –
Ho un piccolo problema con questo. (re-pos # "ATAT" "GATATATGCATATACTT") dovrebbe restituire {9 "ATAT", 3 "ATAT", 1 "ATAT"} ma restituisce {9 "ATAT", 1 "ATAT"}. – boucekv
Se si desidera contare le corrispondenze sovrapposte, modificare leggermente l'espressione regolare: (re-pos # "(? = (ATAT))" "GATATATGCATATACTT") restituisce {9 "", 3 "", 1 ""}. Se si desidera recuperare il testo abbinato, è necessario eseguire (.gruppo m 1) anziché (.gruppo m). –