voglio dividere una stringa utilizzando le lettere che si ripetono come delimitatore, ad esempio, "123aaaa23a3"
dovrebbe essere diviso come ('123', '23a3')
mentre "123abc4"
dovrebbe essere lasciato invariato.
Così ho provato questo:Perl funzione Split - uso ripetendo caratteri come delimitatore
@s = split /([[:alpha:]])\1+/, '123aaaa23a3';
Ma questo restituisce '123', 'a', '23a3'
, che non è quello che volevo. Ora so che questo è dovuto al fatto che l'ultimo 'a'
in 'aaaa'
viene catturato dalle parentesi e quindi conservato da split()
. Ma comunque, non posso aggiungere qualcosa come ?:
dal momento che [[:alpha:]]
deve essere catturato per riferimento posteriore. Come posso risolvere questa situazione?
Non penso che sia possibile modificare la regex per evitare di avere un gruppo di cattura, ma * puoi * semplicemente buttare via tutti gli elementi dispari della lista restituita da 'split' – hobbs
Se l'espressione regolare ha gruppi di cattura , l'elenco restituito contiene anche le sottostringhe corrispondenti/raggruppate. Potresti usare un'alternativa: 'my $ str = '123aaaa23a3' = ~ s/([[: alpha:]]) \ 1 +/~~/r; my @s = split/~~ /, $ str; ' – hwnd