我正在编写一个python脚本,它将标记Windows CIS基准测试的输出。为了做到这一点,我将组策略设置中的值与正则表达式进行匹配,以查看它们是否符合基准测试的条件。
对于基准测试的某些方面,有必要在设置中显示用户列表,但它必须是独占的,并且它们指定的顺序不必一致。
例如,'调整进程的内存配额'应为Administrators,LOCAL SERVICE,NETWORK SERVICE
,但也可以显示为LOCAL SERVICE,NETWORK SERVICE, Administrators
,但不能为Administrators,LOCAL SERVICE,NETWORK SERVICE,phil
。
我正在寻找可以按照与this类似的任何顺序匹配这些必需值的正则表达式,但只有在没有其他值存在的情况下才匹配。
谢谢, 菲尔
修改:这与Regex to match string containing two names in any order和Multiple words in any order using regex不同,因为它们不会完全匹配单词。我希望只按需要名称匹配,但不论是任何顺序。
第二次编辑:该脚本从csv文件加载一组规则,其中包含基准项目编号,描述,所需值以及与组策略设置匹配的正则表达式。这背后的想法是我们将能够为任何基准创建一个带有规则的csv,并且脚本不需要事先知道设置是否应该是数字,用户名列表,布尔值等。
将规则从csv加载到列表中(以下示例中的基准),并将策略设置从tsv加载到第二个列表(策略)。这使得我可以根据使用的基准来尽可能不确定值的检查。
for row in benchmark:
if re.match(row[4],policy[row[2]]):
continue
print('"{}","{}","{}","{}"'.format(row[0],row[1],policy[row[2]],row[3]))
基准csv中的一行示例:
"2.2.5","Ensure 'Adjust memory quotas for a process' is set to 'Administrators,LOCAL SERVICE,NETWORK SERVICE'","Adjust memory quotas for a process","Administrators, LOCAL SERVICE, NETWORK SERVICE","<insert regex here>"
如果基准要求未达到item number, item description, current value, required value
答案 0 :(得分:3)
怎么样
^[(Administrators)(LOCAL SERVICE)(NETWORK SERVICE),\s]+$
或
^(Administrators|LOCAL SERVICE|NETWORK SERVICE|[,\s])+$
见https://regex101.com/r/oJF0aW/2/tests
工作两个版本基本上都说整个字符串必须只包含指定的用户名以及逗号和空格。