11

我正在尝试进行简单的字符串操作:获取文件名,不带扩展名。只是,string.find()点似乎有问题:

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

而且只有点:

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

这是一个错误,还是我做错了什么?

4

3 回答 3

21

string.find(),默认情况下,不在字符串中查找字符串,而是在字符串中查找模式。可以在链接中找到更完整的信息,但这里是相关部分;

这 '。' 表示通配符,可以表示任意字符

要真正找到字符串.,句点需要用百分号转义,%.

编辑:或者,您可以传入一些额外的参数,find(pattern, init, plain)这允许您true作为最后一个参数传入并搜索纯字符串。那将使您的陈述;

> i, j = string.find(s, '.', 1, true)   -- plain search starting at character 1
> print(i, j) 
6 6
于 2013-03-06T21:33:10.240 回答
9

要么做string.find(s, '%.')要么string.find(s, '.', 1, true)

于 2013-03-06T21:57:51.503 回答
5

其他答案已经解释了问题所在。为了完整起见,如果您只对文件的基本名称感兴趣,您可以使用string.match. 例如:

string.match("crate.png", "(%w+)%.")  --> "crate"
于 2013-03-07T05:49:54.503 回答