我知道世界上最令人沮丧的头衔,一个例子应该更好地解释它。我有一个以下格式的大型txt文件,但细节和行数将每次都改变:
Username: john_joe Owner: John Joe
Account:
CLI:
Default:
LGICMD:
Flags:
Primary days:
Secondary days:
No access restrictions
Expiration:
Pwdlifetime:
Last Login:
Maxjobs:
Maxacctjobs:
Maxdetach:
Prclm:
Prio:
Queprio:
CPU:
Authorized Privileges:
BYPASS
Default Privileges:
SYSPRV
对于不同的用户,该序列重复了几千次。我需要在“默认权限”下找到具有SYSPRV的每个用户(理想情况下是上面的第一行)。 我知道我可以编写一个应用程序来执行此操作,我只是希望它们可能是一个很好的正则表达式我可以使用。
干杯
答案 0 :(得分:3)
^Username:\s*(\S+)((?!^Username).)*Default Privileges:\s+SYSPRV
使用选项使^匹配行开头,并使点匹配换行符,将隔离这些记录并在反向引用号中捕获用户名。 1.告诉我你正在使用哪种语言,我将提供一个代码示例。
说明:
^Username:\s
:匹配行开头的“用户名”,冒号和任何空格。
(\S)+
“:匹配任何非空白字符并将其捕获到反向引用号1.这将是用户名。
((?!Username).)*
:匹配任何字符,只要它不是“用户名”的“U”即可。这样可以确保我们不会意外地进入下一条记录。
Default Privileges:\s+SYSPRV
:匹配所需的文字。
因此,在Python中,您可以使用:
result = re.findall(r"(?sm)^Username:\s*(\S+)((?!^Username).)*Default Privileges:\s+SYSPRV", subject)