使用正则表达式分隔字符串

 _, _, XYZ, Path, filename  = string.find("re32:HKEY_LOCAL_MACHINE\SOFTWARE\XYZ\Assistant\Active ", "(%w+):(.+)\(.*)")

print(XYZ)  
print(Path)    
print(filename)
以上代码输出:
 re32
 HKEY_LOCAL_MACHINESOFTWAREXYZAssistant
 Active
我需要以下形式的输出 - 也就是说,我需要四个而不是三组:
re32
HKEY_LOCAL_MACHINE
SOFTWAREXYZAssistant
Active
在这种情况下需要做些什么?     
已邀请:
XYZ, RootKey, Path, filename = ([[re32:HKEY_LOCAL_MACHINESOFT WAREXYZAssistantActive ]]):match ( [[(%w+):([^]+)(.+)(.*)]])
使用[[]]代替“”来停止转义序列。     
_, _, XYZ, RootKey, Path, filename = string.find("re32:HKEY_LOCAL_MACHINESOFTWAREXYZAssistantActive ", "(%w+):(.-)(.+)(.*)")

print(XYZ)
print(RootKey)
print(Path)
print(filename)
应该生产
re32

HKEY_LOCAL_MACHINE

SOFTWARE\XYZ\Assistant\

Active
    
您可以在正则表达式中使用命名组。 示例: - (/ group1 [0-9])(abc) (在上面的示例中将“/”替换为“<”,将“”替换为“>”) 此regx将匹配“3abc”,您可以通过在匹配中选择组名称(group1)来获取匹配的号码。 请参阅http://www.regular-expressions.info/named.html     
_, _, 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 助理 活性 在ideone.com上查看 这个答案与Serge的答案基本相同,但反斜杠在目标和模式字符串中被正确转义,最后的反斜杠包含在第三个捕获组中。 但最重要的是,此解决方案已经过测试。 Ideone FTW!     

要回复问题请先登录注册