Разделите строку с помощью регулярного выражения - PullRequest
1 голос
/ 05 марта 2011
 _, _, 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 ]

1 голос
/ 07 марта 2011
XYZ, RootKey, Path, filename = ([[re32:HKEY_LOCAL_MACHINE\SOFT WARE\XYZ\Assistant\Active ]]):match ( [[(%w+):([^\]+)(.+)\(.*)]])

Используйте [[]] вместо "", чтобы остановить escape-последовательности.

0 голосов
/ 05 марта 2011

Вы можете иметь именованные группы в регулярных выражениях. Пример: - (/ group1 \ [0-9]) (abc) (замените "/" на "<" и "\" на ">" в приведенном выше примере) этот regx будет соответствовать «3abc», и вы можете получить соответствующий номер, выбрав имя группы (group1) в совпадении. сослаться на это http://www.regular -expressions.info / named.html

0 голосов
/ 05 марта 2011
_, _, 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 

См. Его на ideone.com

Этот ответ по сути такой же, как и у Сержа,но обратные слэши должным образом экранируются в целевых и шаблонных строках, а финальный обратный слеш включается в третью группу захвата.

Но самое главное, это решение протестировано . Ideone FTW!

0 голосов
/ 05 марта 2011
_, _, 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
...