Finding '.' with string.find()

前端 未结 3 1634
夕颜
夕颜 2021-01-04 18:47

I\'m trying to make a simple string manipulation: getting the a file\'s name, without the extension. Only, string.find() seem to have an issue with dots:

<
相关标签:
3条回答
  • 2021-01-04 19:07

    string.find(), by default, does not find strings in strings, it finds patterns in strings. More complete info can be found at the link, but here is the relevant part;

    The '.' represents a wildcard character, which can represent any character.

    To actually find the string ., the period needs to be escaped with a percent sign, %.

    EDIT: Alternately, you can pass in some extra arguments, find(pattern, init, plain) which allows you to pass in true as a last argument and search for plain strings. That would make your statement;

    > i, j = string.find(s, '.', 1, true)   -- plain search starting at character 1
    > print(i, j) 
    6 6
    
    0 讨论(0)
  • 2021-01-04 19:15

    Do either string.find(s, '%.') or string.find(s, '.', 1, true)

    0 讨论(0)
  • 2021-01-04 19:31

    The other answers have already explained what's wrong. For completeness, if you're only interested in the file's base name you can use string.match. For example:

    string.match("crate.png", "(%w+)%.")  --> "crate"
    
    0 讨论(0)
提交回复
热议问题