我正在尋找文本字串中某個字符的所有實體,除非它同時以某種方式添加前綴和后綴。
一個簡單的例子是在字串“I am a cat in a hat in a car”中查找“a”的所有實體,但它出現在單詞“cat”中的位置除外:
我是一只貓_ _ _ _ _ _ _ _ _ _
將否定的lookbehind 斷言和否定的lookahead 斷言結合起來似乎不起作用,因為它在任一斷言被觸發時失敗,而不是僅在兩者都被觸發時失敗。
使用正則運算式查找 "a"s 但忽略 "ca"s 會忽略單詞 "car":
/(?<!c)a/g
我是車里的貓? _ _ _ _ _ _ _
使用正則運算式查找 "a"s 但忽略 "at"s 會忽略單詞 "hat":
/a(?!t)/g
我是戴帽子的貓?在c a r _ _
將兩者結合會忽略“汽車”和“帽子”:
/(?<!c)a(?!t)/g
我是一只戴著帽子的貓?在車里? _
正則運算式似乎對這兩個斷言進行了 NOR,是否可以對它們進行 NAND 操作?
uj5u.com熱心網友回復:
您可以嵌套環顧四周,匹配 a 并斷言左邊不是ca后面跟著的,t并使用單詞邊界\b來防止部分單詞匹配。
a(?<!\bca(?=t\b))
正則運算式演示
或者先用lookbehind寫,不c向左斷言:
(?<!\bc(?=at\b))a
正則運算式演示
uj5u.com熱心網友回復:
您可以使用例外標記[^...]并在兩種積極的外觀之間交替:/(?<=[^c])a|a(?=[^r])/g.
通過在 OR 中設定兩個例外,它就像一個 NAND 門和 2 個 NOT 門:
它們都必須為真才能使其不匹配 1 和 1 => 0
只有一個例外需要為假,因此匹配 0 和 1 => 1
如果兩者都是假的,那么還有一個匹配 0 和 0 => 1
| 分割 | 意義 |
|---|---|
(?<=[^c])a |
如果前面有任何文字“c”,則匹配文字“a” |
| |
或者 |
a(?=[^r]) |
如果后面有文字“r”,則匹配文字“a” |
https://regex101.com/r/CWV0ff/1
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/466808.html
標籤:正则表达式
