這似乎是一個重復的問題,但我已經嘗試了所有其他 SO 帖子,這些建議對我不起作用。
基本上,我想排除在開頭、中間或結尾處具有特定子字串的字串。
這是一個示例,
Max_Num_HR,HR_Max_Num,Max_HR_Num
我想排除包含_HR(最后)、HR_(開頭)或_HR_(介于兩者之間)的字串
我到目前為止嘗試過的內容:
r"(^((?!HR_).*))(?<!_HR)$"
這將成功排除具有HR_(開始時)和_HR(結束時),但不是_HR_(介于兩者之間)
我看過如何排除 RegEx 字串中間的字串?
但他們的解決方案似乎對我不起作用。
我知道我的代碼的第一段(^((?!HR_).*))將排除所有包含的內容,HR_因為我^在開頭有一個,然后是一個否定的前瞻。第二段(?<!_HR)$將從字串的末尾開始,并執行否定的向后查找,以查看是否_HR未包含在末尾。按照這種思路,我嘗試(?!_HR_)在這兩個部分之間加入,但無濟于事。那么,考慮到Max_Num_HR、HR_Max_Num、Max_HR_Num作為測驗用例
,如何排除所有三個HR_, ?_HR__HR
uj5u.com熱心網友回復:
該模式缺少_HR_字串中某處的斷言。
您可以在美元符號之后添加否定的lookbehind以斷言不是_HR,$(?<!_HR)以防止一些回溯.
請注意,僅對于匹配,您不需要捕獲組。
^(?!HR_)(?!.*_HR_). $(?<!_HR)
^字串的開始(?!HR_)斷言不在HR_開始(?!.*_HR_)斷言不在_HR_字串中. $匹配 1 個字符以不匹配空字串,并斷言字串結尾(?<!_HR)斷言不_HR向左
正則運算式演示
uj5u.com熱心網友回復:
避免匹配包含'HR_'在開頭、'_HR_'中間或'_HR'結尾的字串的一種方法是匹配具有字串開頭錨點的正則運算式,后跟負前瞻,后跟.*:
^(?!HR_|. _HR_.|. _HR$).*
演示
請注意,'_HR_'根據規范,包含開頭或結尾的行是匹配的。
否定的前瞻讀取,“不匹配字串開頭的'HR_'或'_HR_'前面至少有一個字符,后面跟著一個字符(可能多于一個)或字串末尾的'_HR' .
當且僅當否定前瞻成功時,整個字串才匹配。
負前瞻當然可以用三個負前瞻代替:
^(?!HR_)(?!. _HR_.)(?!. _HR$).*
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/427092.html
標籤:正则表达式
上一篇:正則運算式匹配X連續重復n次
下一篇:字串的正則運算式(URI)
