python 正則表達式之零寬斷言


零寬斷言:用於查找特定內容之前或之后的內容,但並不包括特定內容本身
對於零寬斷言來說,我認為最重要的一個概念是位置,零寬斷言用於指定一個位置,這個位置應該滿足一定的條件(它附近滿足什么表達式),並且這個位置不是字符(因此匹配返回無結果),僅僅是一個位置,因此它們也被稱為零寬斷言
零寬斷言重點的這一個位置,是通過一個條件:這個位置附近(前或者后)存在或者不存在一個A(A可以是一個表達式)來決定的

 

請忘記它的各種名字,我們只記憶公式本身:

(?=exp) :此位置后面匹配表達式exp
(?<=exp):此位置前面匹配表達式exp
(?!exp):此位置后面不匹配表達式exp
(?<!exp):此位置前面不匹配表達式exp
:有些地方只支持部分零寬斷言,比如在線正則表達式

下面是示例:
>>> import re
>>> str = '<div>hello world</div>'
>>> re.search('(?=he).*',str)
<_sre.SRE_Match object; span=(5, 22), match='hello world</div>'>
>>> re.search('(?=he).*(?<=ld)',str)
<_sre.SRE_Match object; span=(5, 16), match='hello world'>
>>> re.search('(?<=<div>).*(?=</div>)',str)
<_sre.SRE_Match object; span=(5, 16), match='hello world'>

>>> str = '3446456sdff456a'
>>> re.search('[a-z]{3}(?!/d)',str)
<_sre.SRE_Match object; span=(7, 10), match='sdf'>
>>> re.search('[a-z]{3}(?![a-z])',str)
<_sre.SRE_Match object; span=(8, 11), match='dff'>

>>> re.search('(?<![0-9])[0-9]{3}',str)
<_sre.SRE_Match object; span=(0, 3), match='344'>   #匹配到了第一個位置
>>> re.search('(?<![0-9])[0-9]{3}(?![0-9])',str)
<_sre.SRE_Match object; span=(11, 14), match='456'>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM