正则表达式匹配,除非找到字符串



谁能帮我创建一个匹配前3个条目的正则字符串,但省略包含"_Classes"的字符串?

样本数据集

s - 1 - 5 - 21 - 1562028002 - 2160284861 - 1562028002 - 2544
s - 1 - 5 - 21 - 1562028002 - 2160284861 - 1562028002 - 5555
s - 1 - 5 - 21 - 1562028002 - 5623562356 - 1562028002 - 7777
s - 1 - 5 - 21 - 1562028002 - 5623562356 - 1562028002 - 7777 - _classes

这似乎匹配一切。如何修改它以不匹配包含"_Classes"的类似字符串?

?
D-d{1}-d{1}-d{2}-d{10}-d{10}-d{9}-d{4}

我个人不会使用regex并利用可以成功解析字符串的SecurityIdentifier类,-as类型操作符也有助于此操作:

-as操作符尝试将输入对象转换为指定的。net类型。如果成功,则返回转换后的对象。如果失败,则返回$null。它不返回错误。

@'
S-1-5-21-1562028002-2160284861-498729489-2544
S-1-5-21-1562028002-2160284861-498729489-5555
S-1-5-21-1562028002-5623562356-895838383-7777
S-1-5-21-1562028002-5623562356-895838383-7777_Classes
'@ -split 'r?n' | Where-Object { $_ -as [System.Security.Principal.SecurityIdentifier] }
^D-d{1}-d{1}-d{2}-d{10}-d{10}-d{9}-d{4}$

添加^$来强制匹配字符串恰好在这些点开始和结束。由于_Classes会导致字符串在前面结束,因此由于$,它将不再匹配。

最新更新