1. 程式人生 > >python正則表示式的零寬斷言

python正則表示式的零寬斷言

零寬斷言

零寬斷言一共分為正向和反向兩類,每類又分為預測先行和回顧後發兩種:

  ####零寬度正預測先行斷言
  簡稱正向先行斷言,語法是(?=exp),它斷言此位置的後面能匹配表示式exp。

  ####零寬度正回顧後發斷言
  簡稱正向後發斷言,語法是(?<=exp),它斷言此位置的前面能匹配表示式exp。

  ####零寬度負預測先行斷言
  簡稱反向先行斷言,語法是(?!exp),它斷言此位置的後面不能匹配表示式exp。

  ####零寬度負回顧後發斷言
  簡稱反向後發斷言,語法是(?

(?=exp)     匹配exp後面的位置
(?<=exp)    匹配exp
前面的位置 (?!exp) 匹配後面跟的不是exp的位置 (?<!exp) 匹配前面不是exp的位置

零寬斷言定長寬度

當使用零寬斷言出現以下錯誤資訊:“sre_constants.error: look-behind requires fixed-width pattern”,我們可以得出python的re模組並不支援變長的後發斷言,只支援定長的後發斷言。

分組

可以使用分組匹配,完成零寬斷言的功能,先將斷言前後位置的字元全部匹配到,再取其中特定的元素即可。

import re
pattern = re.compile(r'<([a-zA-Z]+)>(.*)</\1>'
)#兩個圓括號中的內容表示分組([a-zA-Z]+)、(.*) s = '<html>hello world</html>' ret = re.search(pattern, s) print('re.groups():', ret.groups())#以元組的形式返回所有匹配的分組元素 print('re.group():', ret.group())#不考慮分組,返回整個匹配到的字元 print('re.group(0):', ret.group(0))#不考慮分組,返回整個匹配到的字元 print('re.group(1):', ret.group(1))#返回分組中第1個元素,計數從1開始
print('re.group(2):', ret.group(2))#返回分組中第2個元素,計數從2開始

結果如下 :

re.groups(): ('html', 'hello world')
re.group(): <html>hello world</html>
re.group(0): <html>hello world</html>
re.group(1): html
re.group(2): hello world

參考文章

相關推薦

表示式斷言

零寬斷言:用於查詢在某些內容(但並不包括這些內容)之前或之後的東西,也就是說它們像\b,^,$那樣用於指定一個位置,這個位置應該滿足一定的條件(即斷言)。 分類 程式碼/語法 說明 零寬斷言

【轉】表示式斷言詳解

零寬斷言的意思是(匹配寬度為零,滿足一定的條件/斷言) 我也不知道這個詞語是那個王八蛋發明的,簡直是太拗口了。  零寬斷言用於查詢在某些內容(但並不包括這些內容)之前或之後的東西,也就是說它們像\b,^,$那樣用於指定一個位置,這個位置應該滿足一定的條件(即斷言),因此它

表示式斷言詳解

在使用正則表示式時,有時我們需要捕獲的內容前後必須是特定內容,但又不捕獲這些特定內容的時候,零寬斷言就起到作用了。 一.基本概念: 零寬斷言正如它的名字一樣,是一種零寬度的匹配,它匹配到的內容不會儲存到匹配結果中去,最終匹配結果只是一個位置而已。 作用是給指定位置新增

表示式斷言-趙興壯

零寬斷言的意思是(匹配寬度為零,滿足一定的條件/斷言) 我也不知道這個詞語是誰發明的,簡直是太拗口了。 零寬斷言用於查詢在某些內容(但並不包括這些內容)之前或之後的東西,也就是說它們像\b,^,$那樣用於指定一個位置,這個位置應該滿足一定的條件(即斷言),因此它們也被稱為零寬斷言。 斷言用來宣告一個應該為真的

表示式-斷言

題目很簡單,對字串進行校驗,規則如下:1.長度至少有6位2.包含小寫字母3.包含大寫字母4.包含數字5.僅由數字和字母組成對於2.3.4這3個條件,沒辦法寫在一個正則裡面,於是搜尋發現了零寬斷言這種正則形式,這種形式是以括號包起來的子表示式存在的,由以下兩種形式:正向零寬斷言

python表示式斷言

零寬斷言 零寬斷言一共分為正向和反向兩類,每類又分為預測先行和回顧後發兩種:   ####零寬度正預測先行斷言   簡稱正向先行斷言,語法是(?=exp),它斷言此位置的後面能匹配表示式exp。   ####零寬度正回顧後發斷言   簡稱正向後發斷言,

Python表示式的簡單應用和示例演示

前一陣子小編給大家連續分享了十篇關於Python正則表示式基礎的文章,感興趣的小夥伴可以點選連結進去檢視。今天小編給大家分享的是Python正則表示式的簡單應用和示例演示,將前面學習的Python正則表示式做一個概括。 下面的栗子是用於提取高考日期,一般來說,我們填寫日期都會寫2018年6月7日,但

Python表示式初識(九)

繼續分享Python正則表示式的基礎知識,今天給大家分享的特殊字元是[\u4E00-\u9FA5],這個特殊字元最好能夠記下來,如果記不得的話通過百度也是可以一下子查到的。 該特殊字元是固定的寫法,其代表的意思是漢字。換句話說,只要字元中是漢字,就可以通過該字元進行匹配,該特殊字元也是用中括號括起來的。

Python 表示式:compile,match

本文以匹配×××ID為例,介紹re模組的compile與match的用法 複雜匹配 = re.compile(正則表示式): 將正則表示式例項化              +       

Python 表示式模組詳解

由於最近需要使用爬蟲爬取資料進行測試,所以開始了爬蟲的填坑之旅,那麼首先就是先系統的學習下關於正則相關的知識啦。所以將下面正則方面的知識點做了個整理。語言環境為Python。主要講解下Python的Re模組。 下面的語法我就主要列出一部分,剩下的在python官網直接查閱即可:docs.python.org

Python 表示式:search

本文介紹re模組的search的用法 複雜匹配 = re.compile(正則表示式): 將正則表示式例項化              +         re.search(

Python | 表示式的常見用法

正則表示式的常見用法分為兩塊內容,第一部分是一般具有正則的高階語言都支援的功能,第二部分講解Python所獨特具備的正則特性。   Part 1 正則表示式是由普通字元(例如字元a到z)以及特殊字元(稱為“元字元”)組成的文字模式。模式用於在搜尋文字時要匹配一個或多個字串。

python 表示式找出字串中的純數字

1、簡單的做法 >>> import re >>> re.findall(r'\d+', 'hello 42 I'm a 32 string 30') ['42', '32', '30'] 然而,這種做法使得字串中非純數字也會識別 >

python 表示式 簡介

python 正則表示式 簡介 1.正則表示式:描述字串排列的一套規則 2.可以使用正則表示式提取出所有滿足規則的字串 3.在python中使用re模組是實現在python正則表示式的功能 正則表示式的基礎知識: 1.原子 2.元字元 3.模式修正 原子 :原子是正則表示式中最基

Python 表示式:findall

本文以匹配×××IP為例,介紹re模組的findall的用法: 返回值->列表 複雜匹配 = re.compile(正則表示式): 將正則表示式例項化              +      &

Python表示式:re模組

正則表示式: 使用單個字串來描述、匹配一系列匹配某個句法規則的字串正則表.通常被用來檢索、替換那些符合某個模式(規則)的文字.python自1.5起提供了re模組,它提供了perl風格的正則表示式. re模組簡介 re.match函式 功能 嘗試從字串的起始位置開始匹配一個模式,如

Python 表示式:sub

作用:替換字串中的某字串 本文以 ‘×××’掩蓋手機號部分數字 為例,介紹re模組的sub的用法: 返回值 -> 列表 複雜匹配 = re.compile(正則表示式): 將正則表示式例項化              +&n

python表示式學習筆記

正則表示式 學習資源:https://github.com/EbookFoundation/free-programming-books/blob/master/free-programming-books-zh.md 正則表達例子: |    A|B 

python 表示式匹配特定浮點數

  def is_decimal(num): import re    #以數字開頭,小數點後保留1位數字或兩位數字或者沒有小數部分 dnumre = re.compile(r"""^[0-9]+(\.[0-9]{1,2})?$""") result = d

python--表示式的實戰

正則表示式是在re模組裡的,所以需要事前匯入re模組,re模組裡面的search()方法用於在字串中搜索正則表示式模式第一次出現的位置。 注意:下標從0開始,原字串前面需要加入r'原字串' 上圖因為.號可以匹配除了換行符之外的任何字元,所以它匹配了I,也就是第一個字元