1. 程式人生 > >什麼是零寬斷言

什麼是零寬斷言

有時候在使用正則表示式做匹配的時候,我們希望匹配一個字串,這個字串的前面或後面需要是特定的內容,但我們又不想要前面或後面的這個特定的內容,這時候就需要零寬斷言的幫助了。所謂零寬斷言,簡單來說就是匹配一個位置,這個位置滿足某個正則,但是不納入匹配結果的,所以叫“零寬”,而且這個位置的前面或後面需要滿足某種正則。

比如對於一個字串:”finished going done doing”,我們希望匹配出其中的以ing結尾的單詞,就可以使用零寬斷言:

import re
s = ‘finished going done doing’
p = re.compile(r’\b\w+(?=ing\b)’)

print ‘【Output】’
print [x + ‘ing’ for x in re.findall(p,s)]
【Output】
[‘going’, ‘doing’]
可以看出從中匹配出了’going’和’doing‘兩個單詞,達到目的。

這裡正則中使用的(?=ing\b)就是一種零寬斷言,它匹配這樣一個位置:這個位置有一個’ing’字串,後面跟著一個’\b’符號,並且這個位置前面的字串滿足正則:\b\w+,於是匹配結果就是:[‘go’,‘do’]

^&&&&正預測先行斷言:(?=exp)
匹配一個位置(但結果不包含此位置)之前的文字內容,這個位置滿足正則exp,舉例:匹配出字串s中以ing結尾的單詞的前半部分:

s = “I’m singing while you’re dancing.”
p = re.compile(r’\b\w+(?=ing\b)’)

print ‘【Output】’
print re.findall(p,s)
【Output】
[‘sing’, ‘danc’]


作者:dnxbjyj
來源:CSDN
原文:https://blog.csdn.net/dnxbjyj/article/details/70946508
版權宣告:本文為博主原創文章,轉載請附上博文連結!

作者:dnxbjyj
來源:CSDN
原文:https://blog.csdn.net/dnxbjyj/article/details/70946508


版權宣告:本文為博主原創文章,轉載請附上博文連結!