我正在使用 python 使用正则表达式解析出 SDDL。SDDL 始终采用“类型:某些文本”的形式,最多重复 4 次。类型可以是“O”、“G”、“D”或“S”,后跟冒号。“一些文本”的长度是可变的。
这是一个示例 SDDL:
O:DAG:S-1-5-21-2021943911-1813009066-4215039422-1735D:(D;;0xf0007;;;AN)(D;;0xf0007;;;BG)S:NO_ACCESS_CONTROL
这是我到目前为止所拥有的。其中两个元组返回得很好,但另外两个 - ('G','S-1-5-21-2021943911-1813009066-4215039422-1735') 和 ('S','NO_ACCESS_CONTROL') 不是。
import re
sddl="O:DAG:S-1-5-21-2021943911-1813009066-4215039422-1735D:(D;;0xf0007;;;AN)(D;;0xf0007;;;BG)S:NO_ACCESS_CONTROL"
matches = re.findall('(.):(.*?).:',sddl)
print matches
[('O', 'DA'), ('D', '(D;;0xf0007;;;AN)(D;;0xf0007;;;BG)')]
我想要返回的是
[('O', 'DA'), ('G','S-1-5-21-2021943911-1813009066-4215039422-1735'), ('D', '(D;;0xf0007;;;AN)(D;;0xf0007;;;BG)'),('S','NO_ACCESS_CONTROL')]