Lua从存储文件名的文本文件中匹配获取完整文件名问题
问题原因
你调用string.match时传入的模式仅包含要匹配的前缀本身,Lua的字符串匹配函数只会返回与模式规则完全匹配的内容,因此只会返回你传入的0x10,不会自动抓取后续的完整文件名内容。
解决方法
方案1:修改匹配模式
将匹配规则调整为前缀+任意非换行字符的组合,即可抓取完整行的文件名:
-- 把原来的local name = String:match(channel)替换为下面的代码 local name = String:match(channel .. "[^\n]*")
其中[^\n]*代表匹配任意数量的非换行符,会把前缀之后直到行尾的所有文件名内容全部匹配返回。
如果需要避免前缀出现在文件名中间导致误匹配,可以再增加行首判断规则:
local name = String:match("%f[^\n]" .. channel .. "[^\n]*")
%f[^\n]是Lua的frontier模式,用来匹配行首的位置,保证前缀是出现在一行的开头,符合文件名存储的规则。
方案2:逐行遍历判断(更稳定)
直接逐行读取存储文件名的文本,匹配行前缀即可,逻辑更直观也不容易出现误匹配:
channel = "0x"..string.upper("10") local file = io.open("C:\\Users\\lamu7789\\Documents\\Lua_Plugins\\test_file_reader\\channels.txt", "r") if not file then return nil end local target_name for line in file:lines() do -- 判断当前行是否以指定前缀开头 if line:sub(1, #channel) == channel then target_name = line break end end file:close() print(target_name)
内容的提问来源于stack exchange,提问作者Glupschi
相关产品推荐
相关产品推荐

