使用string.find()函数查找句子中的'.'。

我正在尝试进行简单的字符串操作:获取文件名但不包括扩展名。但是,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

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

点赞
用户477878
用户477878

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

'.'代表通配符,可以代表任何字符

如果要查找实际的字符串.,则需要用百分号%转义句点。

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

> i,j = string.find(s,'。'1true) - 从字符1开始搜索纯文本
> print(i,j)
6 6
2013-03-06 21:33:10
用户1847592
用户1847592

使用以下任一方式之一来查找字符串中的 .string.find(s, '%.')string.find(s, '.', 1, true)

2013-03-06 21:57:51
用户234175
用户234175

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

string.match("crate.png", "(%w+)%.")  --> "crate"
2013-03-07 05:49:54