我有追蹤圖形排除某些模式?
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