【问题标题】:Separate a string using a regex使用正则表达式分隔字符串
【发布时间】:2011-03-05 00:29:25
【问题描述】:
 _, _, XYZ, Path, filename  = string.find("re32:HKEY_LOCAL_MACHINE\\SOFTWARE\\XYZ\\Assistant\\Active ", "(%w+):(.+)\\(.*)")

print(XYZ)  
print(Path)    
print(filename)

以上代码输出:

 re32
 HKEY_LOCAL_MACHINE\SOFTWARE\XYZ\Assistant\
 Active

我需要以下形式的输出——也就是说,我需要四个而不是三组:

re32
HKEY_LOCAL_MACHINE
SOFTWARE\XYZ\Assistant\
Active

在这种情况下必须做什么?

【问题讨论】:

    标签: lua pattern-matching lua-patterns


    【解决方案1】:
    XYZ, RootKey, Path, filename = ([[re32:HKEY_LOCAL_MACHINE\SOFT WARE\XYZ\Assistant\Active ]]):match ( [[(%w+):([^\]+)(.+)\(.*)]])
    

    使用 [[]] 而不是 "" 来停止转义序列。

    【讨论】:

      【解决方案2】:
      _, _, XYZ, RootKey, Path, filename = string.find("re32:HKEY_LOCAL_MACHINE\SOFTWARE\XYZ\Assistant\Active ", "(%w+):(.-)\(.+)\(.*)")
      
      print(XYZ)
      print(RootKey)
      print(Path)
      print(filename)
      

      应该产生

      re32
      
      HKEY_LOCAL_MACHINE
      
      SOFTWARE\\XYZ\\Assistant\\
      
      Active
      

      【讨论】:

      • _, _, XYZ,test, 路径, 文件名 = string.find("re32:HKEY_LOCAL_MACHINE\\SOFTWARE\\XYZ\\Assistant\\Active", "(%w+):(. +)\(.+)\(.*)" ) 打印(XYZ) 打印(测试) 打印(路径) 打印(文件名)
      • @Chet,您还需要为您创建的其他组添加另一个变量
      • 请确认第二组和第三组必须颠倒
      • 根据您的建议获取输出:re32 HKEY_LOCAL_MACHINE\\SOFTWARE\\XYZ Assistant Active 预期:re32 HKEY_LOCAL_MACHINE SOFTWARE\\XYZ\\Assistant Active
      • 根据您的建议获取输出:re32 HKEY_LOCAL_MACHINE\\SOFTWARE\\XYZ Assistant Active 预期:re32 HKEY_LOCAL_MACHINE SOFTWARE\\XYZ\\Assistant Active
      【解决方案3】:

      您可以在正则表达式中命名组。 示例:- (/group1\[0-9])(abc) (在上例中将“/”替换为“”) 此 regx 将匹配“3abc”,您可以通过在匹配中选择组名(group1)来获得匹配的数字。 参考这个http://www.regular-expressions.info/named.html

      【讨论】:

      • LUA 中的正则表达式我需要 yoy 正在谈论 C#
      • 请帮助 LUA 正则表达式
      【解决方案4】:
      _, _, XYZ, RootKey, Path, filename = string.find(
          "re32:HKEY_LOCAL_MACHINE\\SOFTWARE\\XYZ\\Assistant\\Active ",
          "(%w+):(.-)\\(.+\\)(.*)")
      
      print(XYZ)
      print(RootKey)
      print(Path)
      print(filename)
      

      输出:

      re32
      HKEY_LOCAL_MACHINE
      软件\XYZ\助手\
      主动

      See it on ideone.com

      此答案与 Serge 的答案基本相同,但反斜杠在目标和模式字符串中正确转义,最后的反斜杠包含在第三个捕获组中。

      但最重要的是,此解决方案经过测试IdeoneFTW!

      【讨论】:

        猜你喜欢
        • 2014-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-19
        • 2017-01-18
        • 1970-01-01
        相关资源
        最近更新 更多