【问题标题】:lua string match with variable string and variable patternlua字符串与变量字符串和变量模式匹配
【发布时间】:2020-04-06 13:26:54
【问题描述】:

我有一个长变量字符串存储在表索引中,如下所示:

my_table[4] = MYHOST1.fully.qualfied.com

我有一个从文件中读取的主机名列表,这些主机名以字符串形式返回。我正在用 for 循环遍历它。

MYHOST1 MYHOST2 MYHOST3

出于某种原因:

print (string.match(match_string, machine))

不匹配,尽管“match_string”保存了我表中的正确值,而“machine”保存了我迭代的正确名称。我需要在这里对变量字符串做些什么特别的事情吗?

这是整个函数,现在有很多调试。我不确定我是否正在为论坛格式化这篇文章。 . . .我的复制和粘贴非常混乱。

function read_giant_file(file_name)
local header_true = 0
local max_fields = 1
local machine_count = table.maxn(machine_names)
local machine_list = table.concat(machine_names,' ')
--print (machine_count)
--print (machine_list)
for line in io.lines(file_name) do                                                      
    for machine in machine_list:gmatch"%g-[%s]" do                                  
            print ("machine: "..machine)                                            

            for field in line:gmatch("(.-)\t") do                                   
                    table.insert(field_table, field_index, field)                   
                    print ("field_index: "..field_index.. "field: "..field)      
                    field_index = field_index + 1                                   

            end    

            if header_true == 0 then                                                
                    for key, value in pairs(field_table) do                         
                            print ("key: "..key," ".."header: "..value)             
                    end                                                             
                    header_true = 1                                                 
                    max_fields = table.maxn(field_table)                            
                    print ("write out headers")                                     

                    for i = 1,table.maxn(field_table) do                            
                            print ("i: "..i)i                                       
                            table.insert(field_table,i,nil)                         
                    end                                                             



                    field_index = 1                                                 
            end     -- close loop for header

            print ("field index: "..field_index)                                    
            print ("max fields: "..max_fields)                                      
            if field_index >= max_fields and max_fields > 0 and header_true ~= 0 then 
                     print ("FT: "..field_table[4])                                  
                    print ("machine: "..machine)                                    
                    local match_string = field_table[4]                             
                    print (string.match(match_string, machine))                     
                    i, n = string.find(field_table[4], 'machine')                   
                    print (i,n)                                                     
                    if i ~= nil then                                                
                            print ("matchy")                                        
                    end
                    field_index = 1                                                 
            end




    end 
    end

结束

结束

================================================ ===============

【问题讨论】:

  • 能否请您添加打印这两个变量的结果?
  • 你能告诉我们完整的代码吗,因为我只能通过看到两个变量名来猜测,而对它们被分配的方式或内容一无所知
  • 感谢您的代码。你能把文本和模式作为字符串提供吗?
  • 不是确切的文本(我不想/不能在上面公开数据。)但它在功能上与此查询的第一部分中列出的相同
  • 如果你不提供两者,你就不能问为什么模式与文本不匹配。这不是很明显吗?您只需提供变量名称。举一个与你的真实数据产生相同结果的例子

标签: string lua pattern-matching string-matching


【解决方案1】:

所以,这并没有错。我对机器名称的原始匹配也是在机器名称之后捕获空格。我在打印由分隔符包围的机器名称后发现了这一点。我不得不为此添加一个修剪功能。

这是我添加的功能:

function trim(string) local trimmed = string:find"%S" return trimmed and string:match(".*%S", trimmed) or "" end

这让我可以将机器名称作为变量传递并剪切尾随空格。削减匹配中的空格可能会更好,但我想不出一种方法来做到这一点并将其保留为分隔符(这对于制表符分隔值很重要)

【讨论】:

    猜你喜欢
    • 2021-06-11
    • 2022-01-26
    • 2017-10-11
    • 2018-01-18
    • 1970-01-01
    • 2018-03-11
    • 2015-12-22
    • 1970-01-01
    • 2021-09-22
    相关资源
    最近更新 更多