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

Dev*_*oad 6 python regex

我正在编写一个 python 脚本,它将标记 Windows CIS 基准测试的输出。为了做到这一点,我将组策略设置中的值与正则表达式进行匹配,以查看它们是否满足基准的标准。

对于基准测试的某些方面,设置中需要显示用户列表,但该列表必须是排他的,并且指定的顺序不必一致。

例如,“调整进程的内存配额”应该是Administrators,LOCAL SERVICE,NETWORK SERVICE,但也可以表示为LOCAL SERVICE,NETWORK SERVICE, Administrators,但不能是Administrators,LOCAL SERVICE,NETWORK SERVICE,phil

我正在寻找一个正则表达式,它可以按照与此类似的任何顺序匹配这些所需的值,但仅在没有其他值存在时才匹配。

谢谢,菲尔

编辑:这与使用正则表达式匹配包含任意顺序的两个名称的字符串任意顺序的多个单词的正则表达式不同,因为这些不完全匹配单词。我希望仅以任何顺序匹配所需的名称。

第二次编辑:该脚本从 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]))
Run Code Online (Sandbox Code Playgroud)

基准 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>"
Run Code Online (Sandbox Code Playgroud)

如果以下格式不满足基准要求,则最终输出将写入 csv 文件(或在此处以 csv 格式打印)item number, item description, current value, required value

noz*_*man 6

怎么样

^[(Administrators)(LOCAL SERVICE)(NETWORK SERVICE),\s]+$
Run Code Online (Sandbox Code Playgroud)

或者

^(Administrators|LOCAL SERVICE|NETWORK SERVICE|[,\s])+$
Run Code Online (Sandbox Code Playgroud)

请参阅https://regex101.com/r/oJF0aW/2/tests的工作

两个版本基本上都说整个字符串必须仅包含指定的用户名以及逗号和空格。