Regex 排除某些模式?

Regex 排除某些模式?,regex,Regex,我有下面的模式 Administrator yes User yes Userb yes userc yes userd yes 当任何用户后跟yes(中间有任意数量的空格)而不是Admin、user和Userb时,我想要一个匹配 我尝试过消极的回头看和消极的回头看。例如,对于管理员的情况,我已经尝试过这个 (?<!Administrator)\s+ye

我有下面的模式

Administrator        yes
User                 yes
Userb                yes
userc                yes
userd                yes
当任何用户后跟yes(中间有任意数量的空格)而不是Admin、user和Userb时,我想要一个匹配

我尝试过消极的回头看和消极的回头看。例如,对于管理员的情况,我已经尝试过这个

(?<!Administrator)\s+yes
(?

但是,由于\s+,我怀疑还有一行与管理员匹配。非常感谢您的帮助。

您的假设是正确的。
\s+
将只匹配一个空格(例如!)然后这个空格前面不会有
Administrator
,而是另一个空格。这不容易解决,因为只有在.NET中才允许将
\s+
包含在负lookbehind中(其他正则表达式引擎无法处理变长lookbehind)

但是,如果您使用多行模式(如何激活它取决于您的语言/工具),则可以使用负前瞻:

^(?!Administrator|User|Userb)\w+\s+yes
在多行模式下,
^
将在每行的开头匹配

更新:事实上,在写了这篇文章之后,我确实想出了一个使用lookback的解决方案。只需确保在一组单词字符之后立即执行lookback:

\w+(?<!Administrator|User|Userb)\s+yes
这项工作:

^(?!Administrator|User).*yes   

区分大小写如何?
userb yes
是否应匹配?请将示例分为两类(匹配/不匹配)您使用的是什么编程语言?您确定此处需要正则表达式吗?您是否可以在空白处拆分行并检查用户名字段包含的内容?
^(?!Administrator|User).*yes