2013-03-06 10 views
7

Sto cercando di eseguire una semplice manipolazione delle stringhe: ottenere il nome di un file, senza l'estensione. Solo, string.find() sembrano avere un problema con i puntini:Ricerca di "." con string.find()

s = 'crate.png' 
i, j = string.find(s, '.') 
print(i, j) --> 1 1 

E solo con i puntini:

s = 'crate.png' 
i, j = string.find(s, 'p') 
print(i, j) --> 7 7 

è che un bug, o sto facendo qualcosa di sbagliato?

+0

Sede [Come string.find il carattere parentesi quadra a lua] (http://stackoverflow.com/questions/6077423/how-to-string-find-the-square-bracket- personaggio-in-lua). Sebbene si riferisca ad un diverso carattere speciale, la soluzione è la stessa. – finnw

risposta

14

string.find(), per impostazione predefinita, non trova stringhe nelle stringhe, trova patterns nelle stringhe. Maggiori informazioni sono disponibili al link, ma qui è la parte pertinente;

Il "." rappresenta un carattere jolly, che può rappresentare qualsiasi carattere.

Per trovare effettivamente la stringa ., il periodo deve essere sfuggito con un segno di percentuale, %.

EDIT: In alternativa, è possibile passare in alcuni argomenti extra, find(pattern, init, plain) che consente di passare in true come un ultimo argomento e cerca le stringhe semplici. Ciò renderebbe la tua affermazione;

> i, j = string.find(s, '.', 1, true) -- plain search starting at character 1 
> print(i, j) 
6 6 
+1

-1; Il carattere di escape per Lua [patterns] (http://www.lua.org/manual/5.2/manual.html#6.4.1) è '%', non '\'. Provare a utilizzare una barra rovesciata probabilmente ti darà un errore di "sequenza di escape non valida". – hugomg

+0

@missingno Ovviamente sei corretto, ho mescolato il carattere di escape per le sequenze di escape e gli schemi. Risolta la risposta. –

+0

Oh. Grazie. Non mi è mai passato per la testa. :-) – user2141781

7

effettuare una string.find(s, '%.') o string.find(s, '.', 1, true)

3

Le altre risposte hanno già spiegato che cosa c'è che non va. Per completezza, se sei interessato solo al nome di base del file puoi usare string.match. Per esempio:

string.match("crate.png", "(%w+)%.") --> "crate"