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

时间:2011-03-05 00:29:25

标签: lua pattern-matching lua-patterns

 _, _, 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

在这种情况下需要做些什么?

4 个答案:

答案 0 :(得分:1)

XYZ, RootKey, Path, filename = ([[re32:HKEY_LOCAL_MACHINE\SOFT WARE\XYZ\Assistant\Active ]]):match ( [[(%w+):([^\]+)(.+)\(.*)]])

使用[[]]代替“”来停止转义序列。

答案 1 :(得分:0)

_, _, 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

答案 2 :(得分:0)

您可以在正则表达式中使用命名组。 示例: - (/ group1 \ [0-9])(abc) (在上面的示例中将“/”替换为“<”,将“\”替换为“>”) 此regx将匹配“3abc”,您可以通过在匹配中选择组名称(group1)来获取匹配的号码。 请求http://www.regular-expressions.info/named.html

答案 3 :(得分:0)

_, _, 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 

<强> See it on ideone.com

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

但最重要的是,此解决方案已经测试Ideone FTW!