我有追踪图形排除某些模式?
Administrator yes
User yes
Userb yes
userc yes
userd yes
我想,当有任何用户,然后是一个匹配(与它们之间的空间的任意数量的)不是管理员,用户,和用户B
我曾尝试过负面看法和负面看法。例如,对于管理员的情况下,我已经试过这
(?<!Administrator)\s+yes
但是,仍然是具有管理员行了比赛,我怀疑是因为\ S +的。非常感谢,谢谢。
我有追踪图形排除某些模式?
Administrator yes
User yes
Userb yes
userc yes
userd yes
我想,当有任何用户,然后是一个匹配(与它们之间的空间的任意数量的)不是管理员,用户,和用户B
我曾尝试过负面看法和负面看法。例如,对于管理员的情况下,我已经试过这
(?<!Administrator)\s+yes
但是,仍然是具有管理员行了比赛,我怀疑是因为\ S +的。非常感谢,谢谢。
你的假设是正确的。 \s+
只会匹配一个空格(例如!),然后该空格不会在Administrator
之前,而是在另一个空格之前。这是不容易解决的,因为只有在.NET中允许将\s+
包含在负面lookbehind中(其他正则表达式引擎不能处理可变长度的lookbehinds)。
但是,如果使用多模式(如何激活它取决于你的语言/工具),那么你可以改用负前瞻:
^(?!Administrator|User|Userb)\w+\s+yes
在多模式^
将匹配在开始每一行。
更新:事实上,在写完这些之后,我确实想出了一个使用逆序的解决方案。只需确保,你一堆字,字符后立即执行的回顾后:
\w+(?<!Administrator|User|Userb)\s+yes
现在\s+
必须匹配所有的空间,否则不会通过文字字符开头。
请注意,这两种解决方案都对非前缀免费用户有问题。第一个与用户Userbob
不匹配,而第二个与ThatUser
不匹配。这可以通过使用单词边界来解决:
^(?!(?:Administrator|User|Userb)\b)\w+\s+yes
\w+(?<!\b(?:Administrator|User|Userb))\s+yes
不是真的,例如'Usera'应该匹配 – Aprillion
怎么样区分大小写? 'userb yes'应该匹配还是不匹配?请将这些示例分为两类(匹配/不匹配) – Aprillion
您使用的是哪种编程语言?你确定你需要这里的正则表达式吗?你不能只是分割空白行,并检查用户名字段包含什么? – SilentGhost