Qual è il modo più veloce per contare il numero di volte in cui una determinata stringa appare in una più grande? La mia ipotesi migliore sarebbe quella di sostituire tutte le istanze di quella stringa senza niente, calcolare la differenza di lunghezze e dividere per la lunghezza della sottostringa, ma ciò sembra piuttosto lento e ho bisogno di analizzare grandi quantità di dati.Numero di conteggi di una stringa all'interno di un'altra (Perl)
risposta
È possibile acquisire le stringhe, quindi contarle. Esso può essere fatto mediante l'applicazione di un contesto di lista alla cattura con ()
:
my $x = "foo";
my $y = "foo foo foo bar";
my $c =() = $y =~ /$x/g; # $c is now 3
È possibile anche catturare in un array e contare l'array. Stesso principio, tecnica diversa:
my @c = $y =~ /$x/g;
my $count = @c;
Grazie! È molto simile alla seconda soluzione. – ronash
@ronash È la stessa soluzione. Uno usa una variabile temporanea, l'altra no. Si potrebbe anche fare 'my $ count = @c = $ y = ~/$ x/g', ma invece si può semplicemente ignorare' @ c' e usare '()'. Qual è il migliore, se non ti importa delle partite attuali. – TLP
Questo non funziona se '$ x' contiene determinati caratteri regex, poiché' $ x' viene interpretato come un'espressione regolare. Aggiungi '\ Q' per risolvere il problema, ad es. '/ \ Q $ x/G'. Vedere 'quotemeta' per ulteriori informazioni. – tuomassalo
È possibile utilizzare un'espressione regolare globale. Qualcosa di simile:
my @matches = $bigstring =~ /($littlestring)/g;
my $count = @matches;
Sembra la soluzione più semplice, quindi penso che la userò, a meno che non ce ne sia una più veloce? Grazie! – ronash
Non sono sicuro della regex, ma sono sicuro che usare le operazioni di matching è più veloce delle sostituzioni. E non riesco a pensare a una soluzione che non abbia qualcosa a che fare con regex (sarà molto interessante vedere il contrario!) – MattLBeck
my $string = "aaaabbabbba";
my @count = ($string =~ /a/g);
print @count . "\n";
o
my $count = ($string =~ s/a/a/g);
Grazie! Funzionerà se viene richiesta più di una lettera? – ronash
Ehm, sì ... è un'espressione regolare, puoi abbinare a qualsiasi cosa. –
Sulla tua seconda soluzione, tr/a/a/g non sarebbe una soluzione migliore, perché sostituisci il carattere da solo e tr è più veloce su quello di s? – nerdbeere
Solo per completezza si può chiamare ripetutamente la funzione di indice in un ciclo e contare tutte le volte che ha restituito l'indice della stringa in la stringa e cambia la posizione di partenza. Ciò eviterebbe l'uso di espressioni regex e nei miei test è un po 'più veloce delle soluzioni regex.
Ho adattato un sub per farlo da qui: http://www.misc-perl-info.com/perl-index.html
sub occurrences {
my($x, $y) = @_;
my $pos = 0;
my $matches = 0;
while (1) {
$pos = index($y, $x, $pos);
last if($pos < 0);
$matches++;
$pos++;
}
return $matches;
}
- 1. jQuery numero di conteggi di div con una determinata classe?
- 2. Numero di conteggi nel mese corrente
- 3. Numero di conteggi PHP in una matrice booleana
- 4. Numero di conteggi di nodi di sinistra in BST
- 5. SQL: numero di conteggi di valori distinti in ogni colonna
- 6. Divisione selettiva di una stringa in Perl
- 7. Esiste una scorciatoia Perl per contare il numero di corrispondenze in una stringa?
- 8. seleziona il numero totale di conteggi() per anno e mese?
- 9. L'interpolazione di stringa Perl può eseguire una valutazione di espressione?
- 10. Divisione di una stringa/numero ogni n. Carattere/numero?
- 11. Incremento un numero intero alla fine di una stringa in Perl
- 12. Estrai X numero di parole che circondano una determinata stringa di ricerca all'interno di una stringa
- 13. Numero di CPU/core in Perl
- 14. Numero di occorrenze di un carattere in una stringa
- 15. Filtraggio di una stringa in base al numero di parole
- 16. Estrazione di un numero da una stringa di 1 parola
- 17. Node.js l'analisi di un numero all'interno di una stringa
- 18. Come trovo la lunghezza di una stringa Unicode in Perl?
- 19. Implementazione di Mergesort .. Numero di conteggi di inversioni in un array
- 20. conteggio del numero di occorrenze di stringa
- 21. numero di stringa in java
- 22. Rails desiderosi di caricare i conteggi?
- 23. Come convertire stringa in numero (float) in Perl
- 24. Aggiungendo una variabile stringa in una stringa fissa in Perl
- 25. Come convertire una stringa con codifica esadecimale in una stringa di byte in Perl?
- 26. Come aggiungere dinamicamente il pulsante di opzione in base al numero di conteggi specificato?
- 27. numero di conteggi degli accessi da parte di un utente specifico django?
- 28. Come convertire una rappresentazione di stringa di un numero in un numero in coldfusion?
- 29. sottoinsieme dataframe sulla base di conteggi periferici
- 30. Che diamine è una stringa Perl comunque?
potrebbe voler controllare questo fuori ... anche se è dal 1999, e ci sono molto probabilmente altri modi per fare questo genere di cose efficientemente: http://www.perlmonks.org/?node=How%20can%20I%20count%20the%20number%20of%20occurrences%20of%20a%20substring%20within%20a%20string%3F – summea
'perldoc -q count ' – toolic
Si possono sovrapporre? – tchrist