我一直在努力编写这个正则表达式选择模式大约一个小时,我无法理解正则表达式如何处理复杂的模式。
基本上我有一个大约20k用户的列表,其数据如下所示:
d3c80ef4-ae3c-43dc-8cf1-2dd44db19612:
group: []
options:
name: etcusername
7cacfa27-da32-49d0-8c6f-f1dced07e8bb:
group:
- Duke
options:
name: username3
2b5e7795-fba5-4ae0-9479-a1d14f3e4678:
group: []
options:
name: username2
e7f8ef7e-0e58-4142-ba0f-763be65e55e3:
group:
- Resident
options:
name: username1
现在,我想将特定的“群组”列入黑名单。让我们用“Resident”和“Duke”作为例子,一旦我能弄清楚正则表达式(或帮助搞清楚:()我可以填写我想要保留的其他队伍。
这是我到目前为止提出的正则表达式,它只选择每一行而不管组:(
((?!Resident))((?s).+?(name: )(\S)*\b)
我认为这是我需要包含的所有信息,我已经尝试了这么久,我需要继续这样做。如果需要任何其他信息,请在评论中提出,我一定会用所要求的信息更新问题。
答案 0 :(得分:2)
这样的东西?
/(?m)^\s*group:(?s:(?!\s*-\s*(?:Resident|Duke)(?!\S)).)*?^\s*options:\s*^\s*name:\s*(.*?)\s*$/
https://regex101.com/r/jGU7Hk/1
扩展
(?m)
^ \s* group:
(?s:
(?!
\s* - \s*
(?: Resident | Duke ) # Exclude these groups
(?! \S )
)
.
)*?
^ \s* options: \s*
^ \s* name: \s*
( .*? ) # (1) Name
\s* $
更新 - 使用ID
/(?m)^\s*([a-fA-F\d]+(?:\s*-\s*[a-fA-F\d]+)+)\s*:\s*^\s*group:(?s:(?!\s*-\s*(?:Resident|Duke)(?!\S)).)*?^\s*options:\s*^\s*name:\s*(.*?)\s*$/
https://regex101.com/r/TJKKIP/1
(?m)
^
\s*
( # (1 start) GUID
[a-fA-F\d]+
(?: \s* - \s* [a-fA-F\d]+ )+
) # (1 end)
\s* : \s*
^ \s* group:
(?s:
(?!
\s* - \s*
(?: Resident | Duke ) # Exclude these groups
(?! \S )
)
.
)*?
^ \s* options: \s*
^ \s* name: \s*
( .*? ) # (2) Name
\s* $
答案 1 :(得分:1)
这与GUID匹配:跳过排除的组:
^ [0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}:\R(^(?! +- (Resident|Duke)).+\R)+? +name: .+\R