匹配任意顺序的多个单词的正则表达式

6
我正在编写一个Python脚本,用于标记Windows CIS基准的输出。为了做到这一点,我正在使用正则表达式来匹配组策略设置中的值,以查看它们是否符合基准的标准。
对于基准的某些方面,需要在设置中呈现用户列表,但它必须是独占的,并且指定的顺序不必一致。
例如,“调整进程的内存配额”应为Administrators,LOCAL SERVICE,NETWORK SERVICE,但也可以显示为LOCAL SERVICE,NETWORK SERVICE, Administrators,但不能为Administrators,LOCAL SERVICE,NETWORK SERVICE,phil
我正在寻找一个可以匹配这些必需值的正则表达式,在任何顺序下类似于this,但仅在没有其他值存在时才匹配。
谢谢, Phil

编辑:这与使用正则表达式匹配包含两个名称的字符串使用正则表达式匹配任意顺序的多个单词不同,因为它们不仅匹配这些单词。我想要的是仅匹配所需的名称,但顺序可以任意。

第二次编辑:该脚本从csv文件中加载一组规则,其中包含基准项编号、描述、所需值以及要与组策略设置进行匹配的正则表达式。其背后的思想是,我们将能够为任何基准创建一个包含规则的csv文件,并且脚本不需要预先知道设置是否应为数字、用户名列表、布尔值等。

规则从csv中加载到列表中(在下面的示例中为基准),并且策略设置从tsv中加载到第二个列表中(policy)。这使我尽可能地保持了对于使用哪个基准检查值的不可知性。

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>"

如果基准要求未达到,则最终输出将写入CSV文件(或以CSV格式打印在此处),格式为项目编号,项目描述,当前值,所需值

可能是Regex to match string containing two names in any order的重复问题。 - levant pied
虽然这个匹配模式可以匹配任意顺序,但它并不是完全匹配的。因此,如果列表中有一个不应该出现的用户名,但所有必需的用户名都存在,它仍然会匹配。 - DevilToad
使用正则表达式的特定原因是什么?看起来你想要分割用户名序列并检查是否有任何不匹配你的列表。 - asongtoruin
@asongtoruin,请查看第二次编辑,评论太长了 :) - DevilToad
1个回答

6
如何呢?
^[(Administrators)(LOCAL SERVICE)(NETWORK SERVICE),\s]+$

或者
^(Administrators|LOCAL SERVICE|NETWORK SERVICE|[,\s])+$

看看在https://regex101.com/r/oJF0aW/2/tests上的工作。两个版本基本上都表示整个字符串只能包含指定的用户名以及逗号和空格。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接